📅  最后修改于: 2023-12-03 14:45:09.759000             🧑  作者: Mango
当使用 Phoenix 框架时,我们经常会使用 Flash 来在请求之间共享临时数据。通常情况下,这些数据会被保存在重定向中,以便可以在下一个请求中使用。但有时我们可能会遇到 "Phoenix Flash 未保存在重定向上" 的错误。
Phoenix Flash 是 Phoenix 框架中用于在请求之间共享数据的机制。可以将 Flash 存储在会话 (Session) 或 Cookie 中,或者在重定向中传递它们。
当在重定向之后对 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 未保存在重定向上的错误。