1

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

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

如何将当前记录的用户对象传递给实体,以在Symfony 3.0.1上由EasyAdminBundleArticle生成的后端设置特定值author和/或updatedBy属性?

4

2 回答 2

2

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

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

或者

如果你想要这是自动的

您需要在 Doctrine 事件上声明一个侦听器。在您的情况下,我猜测 preUpdate 包括当前用户。

这里有一个非常好的文档 http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html

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

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

例如 :

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);
于 2016-04-08T13:11:29.777 回答
0

如果您与作者实体有关系

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

在控制器上,但这是个坏主意。使用命令或其他设计模式。

于 2016-04-08T13:10:52.973 回答