私は、ユーザが注文を作成できるシステムを持っています。オーダーが作成されるとすぐに、別のエンティティー・テーブルを、オーダーを作成した現行ユーザー、作成したユーザー、およびその他の情報で更新する必要があります。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