2016-02-25 72 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()); 

其保存到數據庫和你做:)

相關問題