Черты Symfony и аннотации Doctrine не работают должным образом

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

Возьмите этот пример:

/**
 * @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, чтобы он работал, а я этого не хочу. Спасибо.


person nacholibre    schedule 29.06.2016    source источник
comment
Класс не наследует аннотации от трейта. Но вы, вероятно, можете использовать расширения доктрины: sluggable для достижения этой цели. .   -  person Muriano    schedule 29.06.2016


Ответы (1)


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

(Компонент валидатора symfony использует «doctrine/annotations» для чтения аннотаций, поэтому, скорее всего, он тоже затронут.)

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

Для этого есть PR, но он еще не объединен, так что вы не в курсе удача.

person ShiraNai7    schedule 29.06.2016