symfony:为用户设置关系的最佳方式

时间:2014-09-09 11:54:42

标签: symfony entity relationship

我在开发和symfony方面非常新。我想知道下面编码的最佳方法是什么。

我有2个实体(用户和帐户)。它们之间存在关联(创建帐户需要用户)。

我想知道在添加新帐户时,在帐户实体(prepersist,controller,__ construct)中设置用户的最佳方法是什么?

PREPERSIST

首先,我没有找到任何用prepersit方法设置用户的东西。有办法吗?

类似的东西:

/**
 * @ORM\PrePersist
 */
public function prePersist()
{
    $this->user = $this->get('security.context')->getToken()->getUser();
    $this->updatedAt = new \Datetime("now");
    $this->isActive = false;
}

CONTROLLER

...

$user = new User();
$account = new Account();
$account->setUser($user);

...

构造

/* Entity account */    
...
public function __construct($user) 
{
    $this->user = $user;
}
...


/* Controller account */
...

$account = new Account($this->get('security.context')->getToken()->getUser())

...

希望你能帮助我。

2 个答案:

答案 0 :(得分:0)

我建议创建Doctrine2 Listener / Subscriber并将其注册为服务,而不是监听Account实体的prePersist事件。您可以在侦听器/订阅者中注入任何其他所需的服务。 您可以在以下网址找到您需要的所有信息:http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html

答案 1 :(得分:0)

根据您的上述代码,您无需挂钩到一个学说事件来完成您想要的任务。您可以在保留Account对象之前在控制器中创建关联。

如果您使用的是Symfony安全组件,则在控制器中获取用户就像$this->getUser()一样简单。您可以通过帐户构造函数方法__construct($user)或setter方法setUser($user)注入用户。虽然构造函数方法更有效,但无论哪种方式都是正确的。

并从控制器内将Account对象持久保存到数据库中:

$em = $this->getDoctrine()->getManager();
$em->persist($account);
$em->flush();