Symfony PHP Event Listener не работает

У меня есть система, где пользователь может создать заказ. Как только заказ создан, необходимо обновить другую таблицу сущностей, указав текущий пользователь, создавший заказ, время, когда он был создан, и некоторую другую информацию.

В основном журнал.

Вот мой класс слушателя;

namespace Qi\Bss\BaseBundle\Lib\PurchaseModule;

use Qi\Bss\BaseBundle\Entity\Business\PurchaseModule\PmodLog;
use Qi\Bss\BaseBundle\Entity\Business\PurchaseModule\PmodOrder;

use Doctrine\ORM\Event\LifecycleEventArgs;

/**
* Class OrderLogger. Purchase Module activity logger.
*/
class OrderLogger
{
/**
* Service container
* @var type
*/
private $serviceContainer;

/**
* Performs tasks before destruction
* @ORM\PostPersist
*/
public function postPersist(LifecycleEventArgs $args)
{
$order = $args->getEntity();

if ($order instanceof PmodOrder) {
$logRecord = new PmodLog();

$user = $this->serviceContainer->get('security.token_storage')->getToken()->getUser();

$logRecord->setCreatedBy($user);
$logRecord->setAction('Gemaak');
$logRecord->setCreatedAt(new \DateTime());
$logRecord->setOrder($order);
$logRecord->setDepartment($user->getDepartment());
}
}

/**
* Sets the sales order exporter object
* @param type $serviceContainer
*/
public function setServiceContainer($serviceContainer)
{
$this->serviceContainer = $serviceContainer;
}
}

Я не понимаю, что я делаю неправильно, и что таблица журналов в моей базе данных не обновляется вообще.

Вот и мой сервис;

bss.pmod.logger:
class: Qi\Bss\BaseBundle\Lib\PurchaseModule\OrderLogger
calls:
- [ setServiceContainer, [@service_container] ]
tags:
- { name: doctrine.event_listener, event: postPersist }

Я не получаю сообщение об ошибке, заказ создан идеально, но база данных журнала остается пустой.

0

Решение

Ну, тебе не нужно упорствовать а также промывать $logRecord? Вы можете получить менеджер организации от $args,

0

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

Вы можете адаптировать это к своему. Сразу после того, как кто-то создает User сущность, новый UserLog сущность / запись создается путем вставки некоторых данных из User сущность, а также.

контроллер

public function createAction()
{
$user = new User();
$user->setUsername('username');
$user->setPassword('password');

$this->entityManager->persist($user);
$this->entityManager->flush();
}

Services.yml

services:
application_backend.event_listener.user_entity:
class: Application\BackendBundle\EventListener\UserEntityListener
tags:
- { name: doctrine.event_listener, event: postPersist }

UserEntityListener.php

namespace Application\BackendBundle\EventListener;

use Application\BackendBundle\Entity\User;
use Application\BackendBundle\Entity\UserLog;
use Doctrine\ORM\Event\LifecycleEventArgs;

class UserEntityListener
{
public function postPersist(LifecycleEventArgs $args)
{
$entity = $args->getEntity();

if ($entity instanceof User) {
$log = new UserLog();
$log->setUserId($entity->getId());
$log->setMessage('postPersist at ' . date('d/m/Y H:i:s'));

$em = $args->getEntityManager();
$em->persist($log);
$em->flush();
}
}
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector