phoenix를 만져보십시오 그 2

7524 단어 ElixirPhoenix
지난번 계속
htps : // 에 x도 cs. pm/p 쪽에 x/아오 g_파게 s. html #콘텐 t
따라 페이지를 추가하겠습니다.

정적 페이지 추가



경로에서 컨트롤러로 라우팅을 추가합니다.

hello/lib/hello_web/router.ex
  scope "/", HelloWeb do
    pipe_through :browser # Use the default browser stack

    get "/", PageController, :index
    get "/hello", HelloController, :index # ★追加
  end

그래서 컨트롤러도 만듭니다.

hello/lib/hello_web/controllers/hello_controller.ex
defmodule HelloWeb.HelloController do
  use HelloWeb, :controller

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

conn에는 요청 정보와 응답에 사용되는 정보가 저장됩니다.
htps : // 에 x도 cs. pm/p㎅g/P㎅g. 안녕. HTML

param은 이번에 사용하지 않으므로 "_"

이어서 뷰측.
View와 template를 만듭니다.

hello/lib/hello_web/views/hello_view.ex
defmodule HelloWeb.HelloView do
  use HelloWeb, :view
end

hello/lib/hello_web/templates/hello/index.html.eex
<div class="jumbotron">
  <h2>Hello World, from Phoenix!</h2>
</div>

표시용으로 데이터를 가공하거나 하는 것이 View,
실제로 표시하는 html을 조립하는 것이 template입니다.

controller에서는 index.html이라고 밖에 지정하고 있지 않습니다만, 패스는 이름으로 해결되는 모양.



template에 비해 여러가지 표시되고 있네요.
hello/lib/hello_web/templates/layout/app.html.eex 를 보면 <%= render @view_module, @view_template, assigns %> 라고 하는 기술이 있으므로, 여기에 임베드되는 것 같네요.
render 는 우선 layoutView 로부터 행해지는 것 같습니다. 설정 등으로 바꿀 수 있을까.
이 근처의 구조는 나중에 파고 보자.

동적 페이지



다음은 매개변수를 받고 표시합니다.
Controller는 이전 HelloController를 그대로 사용합니다.

hello/lib/hello_web/router.ex
  scope "/", HelloWeb do
    pipe_through :browser # Use the default browser stack

    get "/", PageController, :index
    get "/hello", HelloController, :index
    get "/hello/:messenger", HelloController, :show # ★追加
  end

hello/lib/hello_web/controllers/hello_controller.ex
  def show(conn, %{"messenger" => messenger}) do
    render conn, "show.html", messenger: messenger
  end

hello/lib/hello_web/templates/hello/show.html.eex
<div class="jumbotron">
  <h2>Hello World, from <%= @messenger %> !</h2>
</div>



router로 지정한 :messenger가 맵에 들어가 컨트롤러에 건너는 것 같습니다.
이것은, 즉, 패턴 매치를 할 수 있을까・・・!

일단 AddingPages는 끝이지만 실험.

hello/lib/hello_web/controllers/hello_controller.ex
def show(conn, %{"messenger" => messenger}) when messenger=="utonton" do
  render conn, "special.html", messenger: messenger
end

def show(conn, %{"messenger" => messenger}) do
  render conn, "show.html", messenger: messenger
end

hello/lib/hello_web/templates/hello/special.html.eex
<div class="jumbotron">
  <h2>Hey! You are special message from <%= @messenger %> !</h2>
</div>



··· 할 수 있어.
이것, 의외로 편리한 것이 아닐까. 컨트롤러내에서 분기하는 것보다 상당히 깨끗이 하고 있다.
게다가 컨트롤러 내에서 이상한 분기 넣는 것은 상당히 저항이 있지만,
이런 형태라면 쓰기 쉽고 무엇보다 의도가 전해지기 쉽다.

좋은 웹페이지 즐겨찾기