2016-06-29 3 views
1

Моя цель - создать многоразовые черты для общих задач в приложениях symfony2. Например, я хочу иметь слабую черту, когда добавляется к моей сущности, автоматически добавляется поле для заполнения и прослушиватель для обновления каждого объекта. Моя проблема возникает, когда вы пытаетесь унаследовать аннотации доктрины от признаков.Символьные черты и аннотации Doctrine не работают должным образом

Возьмем такой пример:

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

, и я использую его как этот

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

и когда я пытаюсь создать Seller из формы, то @UniqueEntity("name") не работает, и проверка не за работой. Мне нужно вручную добавить его в класс Seller, чтобы работать, и я не хочу этого. Благодарю.

+0

Класс не наследует аннотации из признака. Но для этого вы, вероятно, можете использовать [расширения доктрины: sluggable] (https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/sluggable.md). – Muriano

ответ

0

Классы не наследуют аннотации «на уровне класса» от используемых признаков, только по их методам и свойствам. Читатель аннотаций доктрины этого не поддерживает.

(компонент Symfony валидатор использует «учение/аннотаций» читать аннотации, так что это, скорее всего, пострадавших тоже.)

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

Там в PR для этого, но это еще не объединены так что вам не повезло.

+0

Слишком плохо, я пойду выяснить другой путь. – nacholibre