在我的应用程序中,我允许用户更改密码。
目前,我有一个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);
}
}
}
但问题是,如果发生错误(例如在提交控制器时),即使密码没有改变,也会发送电子邮件。
有没有办法防止内存中的电子邮件被发送?我可以在控制器上发送电子邮件,但我想利用这些事件。
答案 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。