私はフェニックスのおもちゃプロジェクトに取り組んでいます。フェニックスは本質的には複数ステップの注文ウェブサイトです。順序付けプロセスの各ステップで、前のセッションのセッション変数が設定されていることを確認します。現在、私は本質的には、異なる変数を持つ同じプラグのコピーペーストであるそれぞれのプラグを持っています。ここで"汎用"プラグを作成することはできますか?
はプラグが
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
どのように見えるかのおもちゃの一例であるセッション変数の原子を取る汎用プラグ、フラッシュで表示するメッセージへのパスを作成することは可能ですにリダイレクト?私は、同じプラグを繰り返し作成するのではなく、それらの変数をとるプラグを1つ持っていたいと思います。
どのような考えですか? :)
EDIT:誰もが、私は同じコントローラに複数回のプラグ私の「ジェネリック」と呼ばれる方法に興味があるならば、私がしたすべては、異なる呼び出しのそれぞれに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]
を使用する場合は、プラグを適用することもできると思います。
!異なる引数を持つ同じコントローラで呼び出すことは可能ですか?申し訳ありません - エリクシールのnoobのビット今すぐ! –
スクラッチは、それを考え出した。ありがとう:) –