Symfony PHP 事件侦听器不工作
Symfony PHP Event Listener not working
我有一个用户可以创建订单的系统。一旦创建了订单,另一个实体 table 应该更新为创建订单的当前用户、他创建它的时间以及一些其他信息。
基本上是日志。
这是我的听众 class;
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;
}
}
我不明白我做错了什么,而且我数据库中的日志 table 没有得到任何更新。
这也是我的服务;
bss.pmod.logger:
class: Qi\Bss\BaseBundle\Lib\PurchaseModule\OrderLogger
calls:
- [ setServiceContainer, [@service_container] ]
tags:
- { name: doctrine.event_listener, event: postPersist }
我没有收到错误,订单已完美创建,但日志数据库仍为空。
嗯,你不需要坚持和冲洗$logRecord
吗?您可以从 $args
.
获取实体管理器
您可以根据自己的情况进行调整。在有人创建了一个 User
实体之后,一个新的 UserLog
entity/record 也通过从 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();
}
}
}
我有一个用户可以创建订单的系统。一旦创建了订单,另一个实体 table 应该更新为创建订单的当前用户、他创建它的时间以及一些其他信息。
基本上是日志。
这是我的听众 class;
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;
}
}
我不明白我做错了什么,而且我数据库中的日志 table 没有得到任何更新。
这也是我的服务;
bss.pmod.logger:
class: Qi\Bss\BaseBundle\Lib\PurchaseModule\OrderLogger
calls:
- [ setServiceContainer, [@service_container] ]
tags:
- { name: doctrine.event_listener, event: postPersist }
我没有收到错误,订单已完美创建,但日志数据库仍为空。
嗯,你不需要坚持和冲洗$logRecord
吗?您可以从 $args
.
您可以根据自己的情况进行调整。在有人创建了一个 User
实体之后,一个新的 UserLog
entity/record 也通过从 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();
}
}
}