Php Symfony 3-如何将当前登录的用户设置为实体;作者;

Php Symfony 3-如何将当前登录的用户设置为实体;作者;,php,symfony,symfony2-easyadmin,Php,Symfony,Symfony2 Easyadmin,假设我有两个实体类: \AppBundle\Entity\User-用户提供者 \AppBundle\Entity\Article-简单文章 文章类还具有以下属性: 作者-指明创建此特定实体的用户 updatedBy-指示用户最近更新了特定文章的内容 如何将当前记录的用户对象传递给文章实体,以便在Symfony 3.0.1上生成的作者和/或更新者后端属性上设置特定值?如果您与作者实体有关系 $em = $this->getDoctrine()->getManager(); $use

假设我有两个实体类:
\AppBundle\Entity\User
-用户提供者
\AppBundle\Entity\Article
-简单文章

文章
类还具有以下属性:
作者
-指明创建此特定实体的用户
updatedBy
-指示用户最近更新了特定文章的内容


如何将当前记录的用户对象传递给
文章
实体,以便在Symfony 3.0.1上生成的
作者
和/或
更新者
后端属性上设置特定值?

如果您与作者实体有关系

 $em = $this->getDoctrine()->getManager();
$user = new User();
$user->setAuthor($this->getUser());
$em->persist($user);
$em->flush();

但这不是个好主意。使用命令或其他设计模式

如果你在控制器中,你只需这样做

$article->setAuthor($this->getUser());
$article->setUpdatedBy($this->getUser());

如果你想这是自动的

您需要在事件上声明侦听器。在您的情况下,我通过包含当前用户来猜测预更新

这里有一个非常好的文档

我在这里编辑以回答您的评论

不要担心,当您将侦听器声明为服务时,可以注入用户实体

例如:

services:
    your_listener:
        class:     App\AppBundle\Your_Listener
        arguments: ["@security.token_storage"]
你的听众:

private $current_user;

public function __construct($security_context) {
        if ($security_context->getToken() != null) {
            $this->current_user = $security_context->getToken()->getUser();
        }
    } 
现在你可以做了

$entity= $args->getEntity(); // get your Article

if (!$entity instanceof Article) {
        return;
}

$entity->setAuthor($this->current_user);
$entity->setUpdatedBy($this->current_user);

我想采取第二种方法。如何将当前用户对象实例包括到我的侦听器类中?请查看需要将此作为参数的文档:LifecycleEventArgs$args以获得如下用户实体:$entity=$args->getEntity();就在文档中:希望这对你有帮助是的,但是当我更新
文章
entity时,我会在
$args->getEntity()中得到这个类实例而不是用户。我想将当前登录用户设置为此特定实体的作者。我已将答案更改为回答YouTunks!这对我帮助很大!但是关于你的答案有两点:1。将适当的标记添加到服务:)。2.令牌检查应该在其他侦听器方法中(而不是在构造函数中)。例如
preUpdate()
。在构造函数中,我认为应该只将内容分配给一个私有值,因为构造函数中的标记是
null
(from)。你为什么用
symfony2
标记你的问题,当它是关于
symfony3
的时候?@cezar仍然有非常少的人在使用
symfony3
标签,而symfony3与symfony2.8并没有太大区别。实体
文章
有方法
setAuthor
,而不是实体
用户
。您混合了一些内容。很抱歉,这是一个如何将当前用户保存为文章作者的示例。