У меня есть класс Zgh\FEBundle\Entity\User
который расширяет FOS\UserBundle\Model\User
.
use FOS\UserBundle\Model\User as BaseUser; class User extends BaseUser implements ParticipantInterface { use BasicInfo; // .. }
И класс BaseUser
:
abstract class User implements UserInterface, GroupableInterface { protected $id; // .. }
И свойство BaseInfo
:
trait BasicInfo { /** * @ORM\Column(type="string", length=255) * @ORM\Id * @ORM\GeneratedValue(strategy="NONE") */ protected $id; // .. }
Но когда я запускаю свой код, я получаю эту ошибку:
Строгие стандарты: FOS \ UserBundle \ Model \ User и Zgh \ FEBundle \ Model \ Partial \ BasicInfo определяют одно и то же свойство ($ id) в составе Zgh \ FEBundle \ Entity \ User. Это может быть несовместимо, вместо этого используйте вместо этого методы доступа.
Я использую рамки Symfony.
Есть ли способ разрешить этот конфликт между признаком и объектом родительского класса об этом свойстве?
Нет, еще нельзя переписать сопоставленное свойство, используя Trait.
Кроме того, возможной альтернативой является использование нескольких абстрактных классов сущностей и расширение дочерних объектов в зависимости от ваших потребностей.
т.е.
<?php use FOS\UserBundle\Model\User as BaseUser; abstract class AbstractStrategyNoneEntity extends BaseUser { /** * @ORM\Column(type="string", length=255) * @ORM\Id * @ORM\GeneratedValue(strategy="NONE") */ protected $id; } abstract class AbstractStrategyAutoEntity extends BaseUser { /** * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") * */ protected $id; }
И распространите одно из них в дочерних сущностях.
/** * @ORM\Entity */ class Child extends AbstractStrategyNoneEntity { // Inherited mapping }
Надеюсь, это ответит на ваш вопрос.