Symfony2在发送邮件时延迟了flashbag消息

时间:2014-01-09 00:29:22

标签: php symfony swiftmailer

我有一个奇怪的问题,我无法指责。

在我的控制器中,我使用swiftmailer发送电子邮件,使用会话flashbag设置flash消息,然后重定向到另一个页面。

public function testAction() {
    $this->get('session')->getFlashBag()->add('info', 'test flash message');

    $message = new \Swift_Message('test', 'test');
    $message->setTo('email@example.com');
    $message->setFrom('email@example.com');

    $this->get('mailer')->send($message);

    return $this->redirect($this->generateUrl('home_page'));
}

重定向后,我希望看到闪存消息,但似乎发送的邮件会使闪存消息延迟一个请求。也就是说,当我到达'home_page'时,我没有看到flash消息,但是如果我在重定向后重新加载页面,我会这样做。

如果我在swiftmail配置中注释掉send()调用甚至设置disable_delivery:true,则flash消息会按预期工作。

我以为我可能发现了一个错误,但是当我创建一个新项目(symfony / framework-standard-edition 2.4.1)并试用它时,即使我发送邮件也能正常工作。我已经检查过以确保我使用相同版本的swiftmailer,symfony等等。所以,我确定这与我的项目有关,但我不知道从哪里开始。

我正在使用PHP 5.5.7,Symfony 2.4.1。

感谢您的时间

2 个答案:

答案 0 :(得分:2)

快速解决方法是禁用SwiftMailer的假脱机。我仍然不确定这是否是实际的解决方案,但似乎有效。 通过禁用假脱机,邮件程序将在发送邮件时阻止执行。

我注释掉了启用假脱机的行:

#spool:     { type: memory }

默认情况下,邮件程序不会使用假脱机,而是立即发送邮件:http://symfony.com/doc/master/cookbook/email/spool.html

答案 1 :(得分:1)

我相信使用PdoSessionHandler存储会话时会出现错误 - 如果您使用本机会话存储,则问题就会消失,并且Flash消息会按预期使用SwiftMailer工作。

flash消息(app.session.flashbag)依赖会话在页面加载之间存储数据。