ページ

2015年8月16日日曜日

Elixir/Phoenixで遊ぶ 4 - PhoenixのController -

Phoenix controllerに値を渡す

メソッド&ページ追加


前回で作成したプロジェクトを使って、URLで指定した値を画面に表示させる。
例えば、http://localhost:4000/hello/Slowhandにアクセスするとhello Slowhand!と表示するようにしてみる
  • routeに新規パス追加
defmodule SamplePhoenix.Router do
  use SamplePhoenix.Web, :router

  pipeline :browser do
    plug :accepts, ["html"]
    plug :fetch_session
    plug :fetch_flash
    plug :protect_from_forgery
  end

  pipeline :api do
    plug :accepts, ["json"]
  end

  scope "/", SamplePhoenix do
    pipe_through :browser # Use the default browser stack

    get "/", PageController, :index
    get "/hello", HelloController, :index
    get "/hello/:messenger", HelloController, :show ☆
  end

  # Other scopes may use custom stacks.
  # scope "/api", SamplePhoenix do
  #   pipe_through :api
  # end
end
前回同様web/router.exscope "/"ブロックに追加。
/hello/:messengerDictというKey,Valueを提供するmoduleを使って
controllerから値を取れるようにURLにキー(:messager)をくっつけてます。
  • コントローラにメソッド追加
web/controllers/hello_controller.exを以下内容に修正する。
defmodule SamplePhoenix.HelloController do
  use SamplePhoenix.Web, :controller

  plug :action

  def index(conn, _params) do
    render conn, "index.html"
  end

  def show(conn, %{"messenger" => messenger}) do
    render conn, "show.html", messenger: messenger
  end
end
%{"messenger" => messenger}では%{"messenger" => messenger}のパターンが来た時だけ処理が実行され、key'messenger'をmessengerに設定しています。
また、他のparamsも使用したい場合は以下のようにすることも可能。
def show(conn, %{"messenger" => messenger} = params) do
  ...
end
  • テンプレートの作成
web/templates/hello/show.html.eexを以下内容で作成する
<div class="jumbotron">
  <h2>Hello <%= @messenger %>!</h2>
</div>
サーバを起動しhttp://localhost:4000/hello/Slowhandにアクセス
上記の画面が表示される

0 件のコメント:

コメントを投稿