使用 FOSUserBundle 在另一个实体中设置登录用户



我想在另一个实体的设置方法中设置登录的用户。例如,我有实体文章和用户(用户是 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());

将其保存到数据库,您就完成了:)

最新更新