0

除了这个答案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 实现了__constructprePersist功能:

<?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 }

监听器触发,邮件被发送。但是$shipmentLineand$event参数都是空的。有人可以看看我是否做错了什么?我很难从我所读的内容中看到任何错误。

感谢您的时间。

4

0 回答 0