2
我正在从事一个基本上是多步骤订购网站的凤凰城玩具项目。在订购过程的每一步中,我都要确保设置前一个会话的会话变量。目前我有一个插件,每个插件基本上都是具有不同变量的同一个插件的复制粘贴。能够创建一个“通用”插件?
这里的插头是什么样子
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
是否有可能创建一个通用插头,需要一个原子一个会话变量的玩具例子,一个消息在闪存和路径显示重定向到?我希望有一个插件能够接受这些变量,而不是一遍又一遍地创建相同的插件。
有什么想法? :)
编辑:如果任何人有兴趣我怎么叫我的“通用”在同一个控制器插头多次,我所做的就是添加一个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
您现在可以多次使用插头来控制器中的不同动作。我想你也可以使用插件,如果你使用逆,when not action in [:my_action]
。
这是完美的!是否可以用不同的参数在同一个控制器中调用它?对不起 - 现在一点Elixir noob的! –
划痕,想通了。谢谢 :) –