我有一个奇怪的问题,我无法指责。
在我的控制器中,我使用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。
感谢您的时间
答案 0 :(得分:2)
快速解决方法是禁用SwiftMailer的假脱机。我仍然不确定这是否是实际的解决方案,但似乎有效。 通过禁用假脱机,邮件程序将在发送邮件时阻止执行。
我注释掉了启用假脱机的行:
#spool: { type: memory }
默认情况下,邮件程序不会使用假脱机,而是立即发送邮件:http://symfony.com/doc/master/cookbook/email/spool.html
答案 1 :(得分:1)
我相信使用PdoSessionHandler存储会话时会出现错误 - 如果您使用本机会话存储,则问题就会消失,并且Flash消息会按预期使用SwiftMailer工作。
flash消息(app.session.flashbag)依赖会话在页面加载之间存储数据。