Symfony 3 — Как установить текущего зарегистрированного пользователя как сущность & quot; автор & quot;

Давайте предположим, что у меня есть два класса сущностей:
\AppBundle\Entity\User — пользовательский провайдер;
\AppBundle\Entity\Article Простая статья.

Article Класс также имеет эти свойства:
author — указание на пользователя, который создал эту конкретную сущность;
updatedBy — указание пользователю, который недавно обновил содержание конкретной статьи.

Как передать текущий зарегистрированный пользовательский объект Article субъект для установки определенных значений на author и / или updatedBy свойства на бэкэнде, генерируемые EasyAdminBundle на Symfony 3.0.1?

0

Решение

Если вы находитесь в контроллере, вы просто делаете это

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

Или же

Если вы хотите, чтобы это было автоматически

Вам нужно объявить слушателя на событии Doctrine. В вашем случае я предполагаю preUpdate, включая текущего пользователя.

Здесь очень хорошая документация http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html

Я редактирую здесь, чтобы ответить на ваш комментарий

Не волнуйтесь, вы можете внедрить пользовательскую сущность, когда объявите слушателя как Service

Например :

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);
1

Другие решения

Если у вас есть отношения к автору лица

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

на контроллере, но это плохая идея. Используйте команду или другой шаблон проектирования.

0

По вопросам рекламы [email protected]