【发布时间】:2015-11-19 10:29:56
【问题描述】:
我使用FOSUserBundle 来管理我的用户进入我的应用程序。
但实际上,我有多个用户实体:ParticularConsumer.php 和 ProfessionnalConsumer.php。所以我创建了一个ParentUser.php 实体,它作为抽象类 扩展了FOSUserBundle 的BaseUser。看这里的代码:
/**
* ParentUser
*
* @ORM\Table(name="parent_users")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"particular_consumer" = "ParticularConsumer", "professionnal_consumer" = "ProfessionnalConsumer"})
* @ORM\Entity(repositoryClass="MyBundle\EntityBundle\Repository\ParentUserRepository")
*
*/
abstract class ParentUser extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(name="pusr_id", type="integer", nullable=false)
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
// ...
所以还有另外两个实体扩展了Parentuser.php,遵循Doctrine 行为和文档的Class Table Inheritance:
第一个ParticularConsumer.php
/**
* ParticularConsumer
*
* @ORM\Table(name="particular_consumer")
* @ORM\Entity(repositoryClass="MyBundle\EntityBundle\Repository\ParticularConsumerRepository")
*
*/
class ParticularConsumer extends ParentUser
{
public function __construct()
{
parent::__construct();
// your own logic
}
}
第二个ProfessionnalConsumer.php
/**
* ProfessionnalConsumer
*
* @ORM\Table(name="professionnal_consumer")
* @ORM\Entity(repositoryClass="MyBundle\EntityBundle\Repository\ProfessionnalConsumerRepository")
*
*/
class ProfessionnalConsumer extends ParentUser
{
public function __construct()
{
parent::__construct();
// your own logic
}
}
现在,我想做并且知道的是如何持久化父实体和子实体。
确实,当我使用 FOSUserBundle 时,所有路由(注册、登录等)都由这个包管理和生成。现在我需要将数据保存在子实体中,通常它会将数据保存在父实体中,对吗?我该如何进行?
我需要这样注册消费者:
页面上有一个问题,询问用户是否有 专业人士或细节。
这里有一个下拉列表供他们选择。
选择后,我需要在正确的实体中注册用户。
如果用户在下拉列表中选择 particular,我需要
加载/显示一个将数据保存在ParticularConsumer.php 而不仅仅是ParentUser.php 中的表单。
但是当我使用 FOSUSerBundle 时,我真的不知道如何进行。正如您所理解的,使用 FOS 是一种实用的方式来管理用户和管理安全性,我想保留捆绑的逻辑。我想使用良好的做法。
最后,按照 FOSUserBundle 的所有文档来安装它,如果我想注册一个用户 (localhost/web/app_dev.php/register) 我有这个错误:
错误:无法实例化抽象类 MyBundle\EntityBundle\Entity\ParentUser
【问题讨论】:
标签: php symfony inheritance doctrine-orm fosuserbundle