取消发送内存中的电子邮件

时间:2014-12-01 13:53:53

标签: symfony swiftmailer

在我的应用程序中,我允许用户更改密码。

目前,我有一个preUpdate事件的监听器,我检查密码字段是否已更改,如果是,我会向用户发送一封电子邮件,通知他的密码已更改。

public function preUpdate(PreUpdateEventArgs $args)
    {
        $entity = $args->getEntity();

        if ($entity instanceof User) {

            if ($args->hasChangedField('password')) {
                // Send the email about the password been changed successfully
                $this->sendPasswordChangedSuccessfully($entity);
            }
        }
}

但问题是,如果发生错误(例如在提交控制器时),即使密码没有改变,也会发送电子邮件。

有没有办法防止内存中的电子邮件被发送?我可以在控制器上发送电子邮件,但我想利用这些事件。

1 个答案:

答案 0 :(得分:1)

如果您使用的是Doctrine,则可以将其挂钩到Events::postUpdate。像这样:

class EmailListener implements EventSubscriber
{
        private $sendNotification = false;

        public function preUpdate(PreUpdateEventArgs $args)
        {
                $entity = $args->getEntity();

                if ($entity instanceof User) {

                    if ($args->hasChangedField('password')) {
                        $this->sendNotification = true;
                    }
                }
        }

        public function postUpdate(LifecycleEventArgs $eventArgs)
        {
                if($this->sendNotification) {
                        // Send the email about the password been changed successfully
                        $this->sendPasswordChangedSuccessfully($eventArgs->getEntity());                
                }

        }        
}

一旦发送电子邮件,您可能还需要将$ sendNotification设置为false。