Phoenix 1.3 闪光灯不显示

Thi*_*hib 0 elixir flash-message phoenix-framework

我的方法put_flash(conn)get_flash(conn)方法表现得很奇怪;当我使用重定向时,一切正常,但当我尝试添加flash_msg后面的控制器时,什么也没有显示。

看起来消息存储在:phoenix_flash而不是:plug_session; 知道那里出了什么问题吗?

  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}
Run Code Online (Sandbox Code Playgroud)

Paw*_*zak 5

您需要通过管道conn将闪存消息放入函数中render

conn
|> put_flash(:info, "Welcome : info")
|> put_flash(:error, "Welcome : error")
|> render("index.html")
Run Code Online (Sandbox Code Playgroud)

在您的方法中,您将 Flash 消息添加到conn,但render您使用的是已传递到您的操作的未更新的消息。

conn如果您希望将数据正确传递给 ,其他方法是分配给 a render

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

render conn, "index.html"
Run Code Online (Sandbox Code Playgroud)