사용자가 주문을 작성할 수있는 시스템이 있습니다. 주문이 생성되면 즉시 다른 엔터티 테이블이 주문을 만든 현재 사용자, 그가 만든 시간 및 기타 정보로 업데이트해야합니다.Symfony PHP 이벤트 리스너가 작동하지 않습니다.
기본적으로 로그.
여기 내 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 }
오류가 발생하지 않지만 주문은 완벽하게 작성되지만 로그 데이터베이스는 비어 있습니다.
아! 고맙습니다! 나는 그것이 지속된다는 것을 알고 있었고'$ em = $ this-> getDoctrine() -> getManager();'시도를 시도했지만 컨트롤러에서만 작동 할 것입니다. '$ args'에서 엔티티 관리자를 얻을 수 있다는 것을 알지 못했습니다. –
http://www.doctrine-project.org/api/orm/2.1/class-Doctrine.ORM.Event.LifecycleEventArgs.html을 참조하십시오. – dlondero