2016-06-29 17 views
1

Mein Ziel ist es, wiederverwendbare Merkmale für allgemeine Aufgaben in symfony2 Anwendungen zu erstellen. Zum Beispiel möchte ich eine träge Eigenschaft haben, wenn sie zu meiner Entität hinzugefügt wird, wird automatisch ein Slug-Feld und ein Listener hinzugefügt, um jede Entität zu aktualisieren. Mein Problem tritt auf, wenn ich Doktrinannotationen von Merkmalen erben will.Symfony Traits und Doctrine Annotations funktionieren nicht wie erwartet

Nehmen Sie dieses Beispiel:

/** 
* @UniqueEntity("name") 
*/ 
trait Sluggable { 
    /** 
    * @Assert\NotBlank() 
    * @ORM\Column(type="string", length=255, unique=true) 
    */ 
    protected $name; 
} 

und ich bin mit ihm wie diese

/** 
* @ORM\Table(name="seller") 
*/ 
class Seller implements SluggableInterface { 
    use Sluggable; 
} 

und wenn ich versuche, Seller von Form zu erstellen, wird die @UniqueEntity("name") nicht funktioniert und die Validierung nicht Arbeiten. Ich muss es manuell in die Seller Klasse hinzufügen, um zu arbeiten, und das will ich nicht. Vielen Dank.

+0

Eine Klasse erbt keine Anmerkungen von einem Merkmal. Aber wahrscheinlich können Sie [doctrine extensions: träge] (https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/sluggable.md) verwenden, um dies zu erreichen. – Muriano

Antwort

0

Klassen erben keine Annotationen auf Klassenebene von verwendeten Merkmalen, nur von ihren Methoden und Eigenschaften. Der Doku-Annotationsleser unterstützt dies nicht.

(Die symfony-Validator Komponente verwendet „Lehre/Anmerkungen“ die Anmerkungen zu lesen, damit es die meisten wahrscheinlich auch betroffen.)

Siehe https://github.com/doctrine/phpcr-odm/issues/639

Es gibt eine PR dafür, aber es wurde noch nicht verschmolzen also hast du kein Glück.

+0

Schade, ich muss einen anderen Weg finden .. – nacholibre