我正在凤凰城开展一个玩具项目,这个项目基本上是一个多步订购的网站.在订购过程的每一步,我想确保设置上一个会话的会话变量.目前我有一个插件,每个插件本质上是一个具有不同变量的相同插件的复制粘贴.
这是插件外观的玩具示例
defmodule Project.Plugs.RequireDesign do
import Plug.Conn
import Phoenix.Controller
alias Project.Router.Helpers
def init(_params) do
end
def call(conn, _params) do
case get_session(conn, :order_design) de
nil ->
conn
|> put_flash(:error, "You must select a design.")
|> redirect(to: Helpers.order_path(conn, :design))
|> halt()
_ ->
conn
end
end
end
Run Code Online (Sandbox Code Playgroud)
是否有可能创建一个通用插件,它接受会话变量的原子,闪存中显示的消息和重定向到的路径?我想要一个插件来获取这些变量,而不是一遍又一遍地创建相同的插件.
有什么想法吗?:)
编辑:如果有人对我在同一个控制器中多次调用我的"通用"插件感兴趣,我所做的就是when action in[:my_action]为每个不同的调用添加一个.基本上我做了
defmodule MyApp.Web.FooController do
plug Foo, %{key: :order_design,
message: "You must select a design.",
path: Helpers.order_path(conn, :design)
} when action in [:my_action]
...
end
Run Code Online (Sandbox Code Playgroud)
您现在可以多次使用插头来控制控制器中的不同操作.我想如果使用反转,你也可以使用插头when not action …