Raf*_*del 15 php inheritance conflict traits symfony
我有这个课程Zgh\FEBundle\Entity\User延伸FOS\UserBundle\Model\User.
use FOS\UserBundle\Model\User as BaseUser;
class User extends BaseUser implements ParticipantInterface
{
use BasicInfo;
// ..
}
Run Code Online (Sandbox Code Playgroud)
和BaseUser班级:
abstract class User implements UserInterface, GroupableInterface
{
protected $id;
// ..
}
Run Code Online (Sandbox Code Playgroud)
和BaseInfo特点:
trait BasicInfo
{
/**
* @ORM\Column(type="string", length=255)
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
protected $id;
// ..
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行我的代码时,我收到此错误:
严格的标准:FOS\UserBundle\Model\User和Zgh\FEBundle\Model\Partial\BasicInfo在Zgh\FEBundle\Entity\User的组合中定义相同的属性($ id).这可能是不兼容的,请考虑在traits中使用访问器方法.
我正在使用Symfony框架.
无论如何要解决trait和父类对象之间关于此属性的这种冲突吗?
不,目前还无法使用 Trait 重写映射属性。
此外,一种可能的替代方法是使用多个抽象实体类,并根据您的需要扩展您的子实体。
IE
<?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;
}
Run Code Online (Sandbox Code Playgroud)
并将其中之一扩展到您的子实体中。
/**
* @ORM\Entity
*/
class Child extends AbstractStrategyNoneEntity
{
// Inherited mapping
}
Run Code Online (Sandbox Code Playgroud)
希望这能回答您的问题。