2017-10-16 15 views
0

Mes méthodes put_flash(conn) et get_flash(conn) se comportent étrangement; quand j'utilise la redirection tout fonctionne bien, mais rien ne s'affiche lorsque j'essaie d'ajouter flash_msg dans le contrôleur derrière.Phoenix 1.3 flash ne s'affiche pas

On dirait que les messages sont stockés dans :phoenix_flash au lieu de :plug_session; une idée de ce qui ne va pas?

def index(conn, _params) do 
    conn 
    |> put_flash(:info, "Welcome : info") 
    |> put_flash(:error, "Welcome : error") 
    render conn, "index.html" 
    end 

private: %{EverlearnWeb.Router => {[], %{}}, 
:phoenix_action => :index, 
:phoenix_controller => EverlearnWeb.PageController, 
:phoenix_endpoint => EverlearnWeb.Endpoint, 
:phoenix_flash => %{"error" => "Welcome : error", "info" => "Welcome : info"}, 
:phoenix_layout => {EverlearnWeb.LayoutView, :app}, 
:phoenix_pipelines => [:browser], :phoenix_router => EverlearnWeb.Router, 
:phoenix_view => EverlearnWeb.PageView, 
:plug_session => %{"_csrf_token" => "xxx", 
"phoenix_flash" => %{"info" => "Welcome back Thibaut, your are signed in !"}, 
"user_id" => 1}, :plug_session_fetch => :done} 

Répondre

4

Vous devez tuyau votre conn que vous mettez vos messages flash dans la fonction render:

conn 
|> put_flash(:info, "Welcome : info") 
|> put_flash(:error, "Welcome : error") 
|> render("index.html") 

Dans votre approche que vous avez ajouté des messages flash à un conn, mais render vous utilisez non mis à jour celui qui a été transmis à votre action.

Autre approche serait d'attribuer à un conn si vous souhaitez transmettre les données correctement render:

conn = 
    conn 
    |> put_flash(:info, "Welcome : info") 
    |> put_flash(:error, "Welcome : error") 

render conn, "index.html" 
+0

Merci! Comment pourrais-je le manquer ... Juste pour information, pourquoi apparaît-il dans private.phoenix_flash? – Thib

+0

Bonne question, malheureusement, je crains de ne pouvoir commenter les détails d'implémentation ... –