【问题标题】:Phoenix 1.3 flash not showing upPhoenix 1.3 flash 没有出现
【发布时间】:2018-03-28 11:05:15
【问题描述】:

我的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}

【问题讨论】:

    标签: elixir phoenix-framework flash-message


    【解决方案1】:

    您需要通过管道将您的conn 放入render 函数中:

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

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

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

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

    【讨论】:

    • 谢谢!我怎么会错过它...仅供参考,为什么它会出现在 private.phoenix_flash 中?
    • 好问题,很遗憾,我恐怕无法对实施细节发表评论......
    猜你喜欢
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2019-06-15
    • 2018-05-02
    • 2018-01-28
    • 2018-08-02
    相关资源
    最近更新 更多