Черты - конфликт свойств с родительским классом
У меня есть этот класс 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
}
Надеюсь, это ответит на ваш вопрос.