Die Art und Weise Lehre geschrieben wird, macht dies umständlich. Anscheinend möchten Sie das Yaml-Mapping beibehalten, aber nur eine einzige Eigenschaft hinzufügen. Ich denke, Sie können Ihren eigenen benutzerdefinierten Treiber erstellen, der von dem bereitgestellten erweitert wird. Der Yaml-Treiber hat meistens private Methoden, daher ist es schwierig, ein wenig Funktionalität zu überschreiben, aber es ist möglich.
Ich habe einen benutzerdefinierten Treiber erstellt, der sich von der SimplifiedYamlDriver
erstreckt. Die Benennung des Treibers ist wichtig, da die DocLine-Erweiterung versuchen wird, einen ihrer Treiber basierend darauf zu laden, was vor Driver
kommt. Es macht auch einen Strop-Check für Simplified
im Namen, also denke ich, dass die sicherste Wette ist, den ursprünglichen Namen vollständig zu behalten und dem Original einen Alias zu geben.
use Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver as BaseDriver;
class SimplifiedYamlDriver extends BaseDriver
{
public function loadMetadataForClass($className, ClassMetadata $metadata)
{
parent::loadMetadataForClass($className, $metadata);
$element = $this->getElement($className);
if (!isset($element['fields'])) {
return;
}
foreach ($element['fields'] as $name => $fieldMapping) {
if (isset($fieldMapping['localizable'])) {
$original = $metadata->getFieldMapping($name);
$additional = ['localizable' => $fieldMapping['localizable']];
$newMapping = array_merge($original, $additional);
$metadata->fieldMappings[$newMapping['fieldName']] = $newMapping;
}
}
}
}
Dann sagte ich Symfony diesen Treiber zu verwenden, indem die Klasse innerhalb app/config/parameters.yml
parameters:
doctrine.orm.metadata.yml.class: MyBundle\SimplifiedYamlDriver
zwingende Dann habe ich das Mapping wie in Ihrem Beispiel innerhalb MyBundle/Resources/config/doctrine/Foo.orm.yml
MyBundle\Entity\Foo:
type: entity
id:
id:
type: integer
generator:
strategy: IDENTITY
fields:
text:
type: string
localizable: true
aktualisiert Und ich kann holen Diese Zuordnung, wo immer ich Zugang zu Lehre mit:
$mapping = $this
->getDoctrine()
->getEntityManager()
->getClassMetadata(Foo::class)
->getFieldMapping('text');
Wird mir geben:
Array
(
[fieldName] => text
[type] => string
[columnName] => text
[localizable] => 1
)
Dies funktioniert fast. Aber das Problem ist, dass DoctrineExtensions (die wahrscheinlich ähnlich funktioniert) nicht mehr funktioniert, wenn ich das tue, was Sie geschrieben haben. Ich erweitere Doctrine \ ORM \ Mapping \ Driver \ SimplifiedYamlDriver, das standardmäßig verwendet wird, so dass es funktionieren sollte, tut es aber nicht. Irgendeine Idee warum? – Tom
Hmm, diese genaue Antwort, die ich gepostet habe, hat für mich funktioniert. Vielleicht ist es ein Unterschied in den Doktrinversionen. Ich habe^2.5 in composer.json – mickadoo
Ich auch. Doktrin/Orm 2.5.4 und neueste Devmaster StofDoctrineExtensions Localizable ist gezeigt, aber träge, bellable, zeitbeständig aufhören zu arbeiten. – Tom