我想在另一个实体的设置方法中设置登录的用户。例如,我有实体文章和用户(用户是 FOSUser 实体)。我想将当前用户设置为文章的作者。
在文章实体中,我写道:
/**
* @ORMManyToOne(targetEntity="UserBundleEntityUser", inversedBy="articles")
* @ORMJoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
/**
* Set user
*
* @param UserBundleEntityUser $user
* @return Article
*/
public function setUser(UserBundleEntityUser $user = null)
{
//This line is the problem
$this->user = $this->container->get('security.context')->getToken()->getUser();
return $this;
}
我正在尝试从容器中获取用户,但是当我执行保存时,设置的值为空。我在控制器中测试线路,并成功获得了当前用户。也许在实体内部获取登录用户的方法不同?
实体无法访问服务容器,您也不能使用其中的任何服务。
要使其正常工作,请从控制器或其他可以使用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();
并且该字段将被正确填写。
你必须使用函数设置用户 chalasr 说
$article->setUser($this->getUser());
将其保存到数据库,您就完成了:)