特征 - 属性与父类冲突

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和父类对象之间关于此属性的这种冲突吗?

cha*_*asr 3

不,目前还无法使用 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)

希望这能回答您的问题。