小编Dyl*_*den的帖子

能够创建"通用"插头吗?

我正在凤凰城开展一个玩具项目,这个项目基本上是一个多步订购的网站.在订购过程的每一步,我想确保设置上一个会话的会话变量.目前我有一个插件,每个插件本质上是一个具有不同变量的相同插件的复制粘贴.

这是插件外观的玩具示例

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 …

elixir phoenix-framework

2
推荐指数
1
解决办法
49
查看次数

标签 统计

elixir ×1

phoenix-framework ×1