その3に引き続き
https://hexdocs.pm/phoenix/routing.html#pipelines
のページから
Pipelines
パイプラインは各リクエストに適用できる共通処理のようなものと思って良さそう。
以下特徴を持つ
- リクエストに対して何かしらの処理や変換を行う
- 順序を決められる
一つ一つの処理はPlugが担っていて、それを順序に沿って並べたものがpipeline。
※Plugって何よ、というのはまたいつか
今までのサンプルでも、こんな感じで定義されている。
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
end
pipeline :api do
plug :accepts, ["json"]
end
pipelineを適用するには、pipe_throughを使う。
scope "/", HelloWeb do
pipe_through :browser
get "/hello", HelloController, :index
end
この場合、:browserパイプラインはHelloControllerのindexが呼ばれる前に適用される。
コントローラに前処理を追加できるということらしい。
また、パイプラインを複数適用したり、パスによって適用するパイプラインを分けることも可能
scope "/admin", as: :admin do
pipe_through [:browser, :admin_check] # /adminのときだけpipelineを追加
(略)
end
scope "/", HelloWeb do
pipe_through :browser # こっちには :admin_checkは適用しない
(略)
end
ChannelRoutes
いきなりWebSocketの話。
WebSocketの場合はRouteの書き方が変わってきますよ、という話。
というかもはやRoutesではなく、endpointに直接書く。
socket "/socket", HelloWeb.UserSocket
mix phx.new
の段階でこのサンプル記述は入っているはず。
Socket周りの実装は別の章であるようなので、ここでは割愛。
とりあえずrouterではないよ、ってことだけ頭に入れておけば良さげ。