phoenix를 만져보십시오 그 2
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>
··· 할 수 있어.
이것, 의외로 편리한 것이 아닐까. 컨트롤러내에서 분기하는 것보다 상당히 깨끗이 하고 있다.
게다가 컨트롤러 내에서 이상한 분기 넣는 것은 상당히 저항이 있지만,
이런 형태라면 쓰기 쉽고 무엇보다 의도가 전해지기 쉽다.
Reference
이 문제에 관하여(phoenix를 만져보십시오 그 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/utonn/items/8a1187e91eddc9a549e5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)