📜  phoenix flash 未保存在重定向上 (1)

📅  最后修改于: 2023-12-03 14:45:09.759000             🧑  作者: Mango

Phoenix Flash 未保存在重定向上

当使用 Phoenix 框架时,我们经常会使用 Flash 来在请求之间共享临时数据。通常情况下,这些数据会被保存在重定向中,以便可以在下一个请求中使用。但有时我们可能会遇到 "Phoenix Flash 未保存在重定向上" 的错误。

什么是 Phoenix Flash?

Phoenix Flash 是 Phoenix 框架中用于在请求之间共享数据的机制。可以将 Flash 存储在会话 (Session) 或 Cookie 中,或者在重定向中传递它们。

为什么会出现 "Phoenix Flash 未保存在重定向上" 错误?

当在重定向之后对 Flash 进行更改时,Phoenix 通常会自动将 Flash 存储在重定向中,并在下一个请求中使其可用。然而,有时我们可能会忘记将重定向返回给客户端,或者在返回重定向之前已经结束了当前请求。这些情况下,也就是 Phoenix Flash 未保存在重定向上的情况发生。

如何解决 "Phoenix Flash 未保存在重定向上" 错误?

为了解决 Phoenix Flash 未保存在重定向上的错误,我们需要保证在进行任何更改之前,我们必须返回一个重定向。可以使用 Phoenix 提供的 redirect 函数来返回重定向:

def create(conn, params) do
  changeset = Post.changeset(%Post{}, params)
  if changeset.valid? do
    post = Repo.insert!(changeset)
    conn
    |> put_flash(:info, "Post created successfully")
    |> redirect(to: post_path(conn, :show, post))
  else
    render(conn, "new.html", changeset: changeset)
  end
end

在上面的代码中,如果 changeset 是有效的,我们将在 conn 上设置一个 Flash 信息,并使用 redirect 返回重定向。如果 changeset 无效,我们会直接渲染一个新的模板,而不会返回重定向。

结论

Phoenix Flash 是 Phoenix 框架中一个非常方便的特性,可以用来在请求之间共享数据。但是,如果在返回重定向之前修改 Flash 的值,我们必须确保先返回一个重定向,否则就可能会遇到 Phoenix Flash 未保存在重定向上的错误。