除了这个答案和Eric Geloen 的博客文章之外,我还阅读了关于实体侦听器的Symfony 文档和关于实体侦听器的学说文档,但我无法让我的听众做我想做的事。在此实体中,我有一个名为 status 的字段,当此字段更改时,将发送一封电子邮件通知接收者更改。
实体
我有一个shipmentLine
带有以下注释的实体:
<?php
namespace Acme\Bundle\ShipmentBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Expose;
/**
* @ORM\Entity
* @ORM\HasLifecycleCallbacks
* @ORM\EntityListeners({"\Acme\Bundle\ShipmentBundle\Listener\ShipmentLineListener"})
* @ExclusionPolicy("all")
*/
class ShipmentLine
{
. . .
}
听众
ShipmentLineListener 实现了__construct
和prePersist
功能:
<?php
namespace Acme\Bundle\ShipmentBundle\Listener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Acme\Bundle\ShipmentBundle\Entity\ShipmentLine;
class ShipmentLineListener
{
private $mailer;
private $twig;
public function __construct(\Swift_Mailer $mailer, \Twig_Environment $twig)
{
$this->mailer = $mailer;
$this->twig = $twig;
}
public function prePersist(ShipmentLine $shipmentLine, LifecycleEventArgs $event)
{
/** @var \Swift_Mime_Message $message */
$message = \Swift_Message::newInstance()
->setSubject('Entity Listener test')
->setFrom(array('my@email.address' => 'Acme'))
->setTo(array('my.other@email.address' => 'Tommy (Acme)'))
->setBody(json_encode($event), 'text/html');
$this->mailer->send($message);
}
}
服务.yml
最后我在 services.yml 中注册了我的监听器
entity.entity_listener.shipmentline_update:
class: Acme\Bundle\ShipmentBundle\Listener\ShipmentLineListener
arguments: [ "@mailer", "@twig" ]
tags:
- { name: doctrine.orm.entity_listener, event: prePersist }
监听器触发,邮件被发送。但是$shipmentLine
and$event
参数都是空的。有人可以看看我是否做错了什么?我很难从我所读的内容中看到任何错误。
感谢您的时间。