Черты - конфликт свойств с родительским классом

У меня есть этот класс 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:

trait BasicInfo
{
    /**
     * @ORM\Column(type="string", length=255)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="NONE")
     */
    protected $id;

    // ..
}

Но когда я запускаю свой код, я получаю эту ошибку:

Строгие стандарты: FOS\UserBundle\Model\Пользователь и Zgh\FEBundle\Model\Partial\BasicInfo определяет одно и то же свойство ($ id) в состав Zgh\FEBundle\Entity\User. Это может быть несовместимы, вместо этого рассмотрите использование методов доступа в чертах.

Я использую инфраструктуру Symfony.

Есть ли способ разрешить этот конфликт между признаком и объектом родительского класса об этом свойстве?

Ответ 1

Нет, еще нельзя переписать сопоставленное свойство с помощью 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
}

Надеюсь, это ответит на ваш вопрос.