如何扩展FOSUserBundle的用户实体?

我有我的UserBundle扩展了FOSUserBundle并且工作正常。 但是现在,我想创建具有différents属性的多个用户实体。 但问题是,当我创建我的用户Entity扩展我的主用户实体像这样:

class User extends BaseUser
{
    protected $id;
    // The main user class who extends FOSUser entity
}

class UserB extends User
{
    //
}

当我这样做时,我有一个错误:`

MyApp UserBundle Entity UserB :: $ id的访问级别必须受到保护(如在类MyApp UserBundle Entity User中)。

当我在我的UserB实体中创建一个受保护的ID时,我有这样的:

PHP致命错误:无法重新声明MyApp UserBundle Entity UserB :: $ id。

完成后,我无法删除我的User实体中的id,因此返回一个Doctrine错误:

[学说 ORM 映射 MappingException]
没有为实体“MTS UserBundle Entity User”指定标识符/主键。 每个实体必须有一个标识符/主键。

有人可以帮助我吗?

编辑:问题解决了。 我的代码:

/**
 * MTSUserBundleEntityUser
 *
 * @ORMEntity
 * @ORMInheritanceType("SINGLE_TABLE")
 * @ORMDiscriminatorColumn(name="type", type="string")
 * @ORMDiscriminatorMap({"userfb" = "UserFB"})
 */
abstract class User extends BaseUser
{
    /**
     * @var integer $id
     *
     * @ORMColumn(name="id", type="integer")
     * @ORMId
     * @ORMGeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string $type
     */
    private $type;
}

/**
 * @ORMTable()
 * @ORMEntity()
 */
class UserB extends User
{
    // My variables
}

你的问题似乎缺乏注解。

我可以通过从我的工作代码中删除这个来复制你的'每个实体都必须有一个标识符/主键'的错误消息:

/**
 * @ORMId
 * @ORMColumn(type="integer")
 * @ORMGeneratedValue(strategy="AUTO")
 */

我的作品:

 /**
 * @ORMEntity
 * @ORMTable(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORMId
     * @ORMColumn(type="integer")
     * @ORMGeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}
链接地址: http://www.djcxy.com/p/69375.html

上一篇: How extends User entity of FOSUserBundle?

下一篇: What is the advantage of using abstract classes instead of traits?