2016-02-25 69 views
1

我想在另一个实体的设置方法中设置登录的用户。例如,我有实体Article和User(用户是FOSUser实体)。我想将当前用户设置为文章的作者。用FOSUserBundle在另一个实体中设置登录的用户

在文章的实体,我写:

/** 
* @ORM\ManyToOne(targetEntity="UserBundle\Entity\User", inversedBy="articles") 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
*/ 
    protected $user; 

    /** 
    * Set user 
    * 
    * @param \UserBundle\Entity\User $user 
    * @return Article 
    */ 
    public function setUser(\UserBundle\Entity\User $user = null) 
    { 
     //This line is the problem 
     $this->user = $this->container->get('security.context')->getToken()->getUser(); 

     return $this; 
    } 

我想从容器中的用户,但是当我执行保存,设定值是零。我在控制器中测试该行,并且成功获取当前用户。也许在一个实体内获取登录用户的方法是不同的?

+0

给出的答案在控制器工作。您也可以在Doctrine生命周期事件中进行设置,并自动完成,而不必手动设置。 –

回答

1

实体无法访问服务容器,也无法使用其中的任何服务。

要使其工作,请从控制器或可以使用container的其他上下文中调用Article::setUser()。例如:

$currentUser = $this->container->get('security.token_storage')->getToken()->getUser(); 

$article = new Article(); 
$article->setUser($currentUser); 
// ... 
$em = $this->getDoctrine()->getManager(); 
$em->persist($article); 
$em->flush(); 

并且该字段将被正确填充。

0

你必须设置与功能chalasr用户说

$article->setUser($this->getUser()); 

其保存到数据库和你做:)

相关问题