2014-01-09 106 views
2

我有一個奇怪的問題,我無法放下手指。Symfony2在發送郵件時延遲了Flashbag消息

在我的控制器中,我使用swiftmailer發送電子郵件,使用會話Flashbag設置一條Flash消息,並重定向到另一個頁面。

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

    $message = new \Swift_Message('test', 'test'); 
    $message->setTo('[email protected]'); 
    $message->setFrom('[email protected]'); 

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

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

重定向後,我希望看到的提示信息,但似乎當郵件被髮送,使得由一個請求延遲閃光燈消息有事。也就是說,當我到達'home_page'時,我看不到閃光消息,但是如果在重定向後重新加載頁面,我會這樣做。

如果我在swiftmail配置中註釋掉send()調用或甚至設置disable_delivery:true,則Flash消息按預期工作。

我想我可能已經發現了一個bug,但是當我創建一個新項目(symfony/framework-standard-edition 2.4.1)並嘗試這個時,即使在我發送郵件時它也可以工作。我已經檢查過,以確保我使用的是swiftmailer,symfony等相同的版本。所以,我確定這是與我的項目有關的內容,但我沒有想到該從哪裏去的想法。

我使用PHP 5.5.7,Symfony 2.4.1。

感謝您的時間

+1

你說你改寫了從無到有這個代碼,但couldn不會重現這種行爲?新的testAction *與上面的完全相同嗎? – Mathew

+0

唯一的區別是電子郵件主題和正文,可以忽略的差異。當然,還有更多的事情不僅僅是行動中的事情,所以我首先禁用了一些捆綁軟件。 – Jody

+0

@Jody我得到了同樣的錯誤,你有沒有找到解決方案? –

回答

1

我相信使用PdoSessionHandler存儲會話時,有一個錯誤 - 如果你使用本地會話存儲問題消失,並與SwiftMailer預期的提示信息工作。

Flash消息(app.session.flashbag)依靠會話在頁面加載之間存儲數據。

+1

謝謝,我會更多地閱讀這些內容。我確實找到了這個相關的線索:http://stackoverflow.com/questions/17222724/symfony2-pdo-session-with-flashbag這似乎證實了你的懷疑,所以我會將問題標記爲接受,直到我觀察到其他情況。 – Jody

2

快速修復是爲SwiftMailer禁用假脫機。我仍然不確定這是否是實際的解決方案,但它似乎有效。 通過禁用假脫機,郵件程序將在發送郵件時阻止執行。

我註釋掉,使該行後臺:

#spool:  { type: memory } 

默認情況下,郵件不會使用假脫機,但發送郵件的時候了:http://symfony.com/doc/master/cookbook/email/spool.html

+0

你救了我的生命!!!!!!!!!!我知道這是一件小事我拉着頭髮。和BOOM! – hsb1007