2015-02-09 35 views
2

使用Symfony 2.6時,我正在尋找在我的應用程序中登錄/註銷時添加Flash消息的最佳方式。我確切地說,在每種情況下,我都不想修改響應(我不需要)。Symfony 2:登錄/註銷時的Flash消息

這裏是我的解決方案:

登錄:

1.首先解決辦法:

我可以使用security.interactive_login事件或security.authentication.success事件。在這兩種情況下,我都可以實現一個偵聽器來在事件發生時添加一條Flash消息。

2.解決方法二:

我可以創建自己的LoginSuccessHandler實現了AuthenticationSuccessHandlerInterface,但在這種情況下,我不得不返回響應。此外,我不熟悉這種方法,恐怕會覆蓋默認的成功處理程序。那是對的嗎 ?

註銷:

我可以創建一個實現LogoutHandlerInterface一個LogoutListener。在這種情況下,我也不敢重寫defaut註銷處理程序。

謝謝您的建議。

回答

0

使用FOSUserBundle登錄/註銷邏輯等已經實現了......
因此你將有possibilty上顯示的登錄檢查重定向錯誤:

要做到這一點,你必須返回錯誤的樹枝

$session->getFlashBag()->add('error', 'Error message'); 

而且在樹枝你需要一個塊這樣的顯示錯誤,如果會話持有任何:

{% block flashes %} 
    {% if app.session.flashbag.peekAll|length > 0 %} 
     {{ session_flash() }} 
    {% endif %} 
{% endblock flashes %} 
+0

謝謝你,但我不易懂找到你的建議。我有效地使用了FOSUserBundle。根據不同的事件[(FlashListener.php)](https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/EventListener/FlashListener.php),此捆綁包中實際上有7個預定義的Flash消息。你能解釋我在應用程序的哪個地方添加了一條Flash消息嗎?我的目的只是告訴用戶他現在已連接或斷開連接。所有的Flash消息都顯示在我的佈局中。 – Cruz 2015-02-09 18:43:15

+0

你可以添加一個掛鉤到[FOSUser事件](https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/EventListener/LastLoginListener.php)的服務 - 添加一個在onImplicitLogin成功後添加一個flash的地方,用戶去,登錄後將出現閃光信息。必須有一個用於註銷,但我不確定它在文檔中的位置。您可以在控制器中鉤入[控制器](https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/controller_events.md),以便通過事件的控制器。 – George 2015-02-09 20:53:48

+0

@George我已經創建了一個額外的偵聽器,它在成功登錄後添加一條flash消息(使用security.interactive_login事件,但它應該使用fos_user.security.implicit_login事件)。它工作正常。我不認爲註銷事件存在。即使在symfony 2。我按照文檔中的描述掛鉤到控制器,但重定向響應。 – Cruz 2015-02-09 21:05:26