如何扩展FOSUserBundle的用户实体


How extends User entity of FOSUserBundle?

我有我的UserBundle扩展FOSUserBundle和工作良好。但是现在,我想创建具有不同属性的多个用户实体。但问题是,当我创建user实体时它扩展了主user实体,像这样:

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.

最后,我不能删除id在我的用户实体少返回一个学说错误:

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

有人能帮我吗?

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

/**
 * MTS'UserBundle'Entity'User
 *
 * @ORM'Entity
 * @ORM'InheritanceType("SINGLE_TABLE")
 * @ORM'DiscriminatorColumn(name="type", type="string")
 * @ORM'DiscriminatorMap({"userfb" = "UserFB"})
 */
abstract class User extends BaseUser
{
    /**
     * @var integer $id
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /**
     * @var string $type
     */
    private $type;
}
/**
 * @ORM'Table()
 * @ORM'Entity()
 */
class UserB extends User
{
    // My variables
}

您的问题似乎是缺少注释。

我能够复制你的"每个实体必须有一个标识符/主键"错误信息从我的工作代码中删除:

/**
 * @ORM'Id
 * @ORM'Column(type="integer")
 * @ORM'GeneratedValue(strategy="AUTO")
 */

The works for me:

 /**
 * @ORM'Entity
 * @ORM'Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM'Id
     * @ORM'Column(type="integer")
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $id;
    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}