我在开发和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())
...
希望你能帮助我。
答案 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();