15 Phoenix HTML 15.1 ModestGreeter RAVT web/router.ex web/router.ex : 12 scope "/", ModestGreeter do 13 pipe_through :browser 14 15 + get "/", TopController, :index 16 get "/hello/:name", HelloController, :show 17 get "/hello", HelloController, :show 18 end 19 end top index 131
15 web/controllers/top_controller.ex (New) 1 defmodule ModestGreeter.TopController do 2 use ModestGreeter.Web, :controller 3 4 def index(conn, _params) do 5 render conn, "index.html" 6 end 7 end web/views/top_view.ex (New) 1 defmodule ModestGreeter.TopView do 2 use ModestGreeter.Web, :view 3 end top $ mkdir -p web/templates/top index web/templates/top/index.html.eex (New) 1 <div class="jumbotron m-1"> 2 <h1 class="display-3">modestgreeter</h1> 3 <p class="lead">modestgreeter </p> 4 </div> Bootstrap Jumbotron Web jumbotron div Jumbotron m-1 11 1rem 5 display-3 display-1 display-4 132
15.1 6rem 5.5rem 4.5rem 3.5rem mix phoenix.server http://localhost:4000 15.1 15.1 @name not available web/templates/layout app.html.eex 10 <title>modestgreeter (<%= @name %>)</title> @ @ @name 133
15 render :name index render index render 3 top_controller.ex web/controllers/top_controller.ex : 4 def index(conn, _params) do 5 - render conn, "index.html" 5 + render conn, "index.html", name: "Top" 6 end 7 end ModestGreeter (Top) ModestGreeter 15.2 document_title view module web/controllers/top_controller.ex : 5 - render conn, "index.html", name: "Top" 5 + render conn, "index.html" : HelloView web/views/hello_view.ex 1 defmodule ModestGreeter.HelloView do 2 use ModestGreeter.Web, :view 134
15.2 document_title 3 + 4 + def document_title(assigns) do 5 + "ModestGreeter (#{assigns.name})" 6 + end 7 end document_title TopView web/views/top_view.ex 1 defmodule ModestGreeter.TopView do 2 use ModestGreeter.Web, :view 3 + 4 + def document_title(_assigns) do 5 + "ModestGreeter" 6 + end 7 end 1 _ TopController index web/templates/top/index.html.eex 1 <div class="jumbotron m-1"> 2 - <h1 class="display-3">modestgreeter</h1> 2 + <h1 class="display-3"><%= document_title(assigns) %></h1> 3 <p class="lead">modestgreeter </p> 4 </div> app.html.eex web/templates/layout/app.html.eex 10 - <title>modestgreeter (<%= @name %>)</title> 10 + <title><%= @view_module.document_title assigns %></title> 135
15 15.2 ModestGreeter 15.2 ModestGreeter URL http://localhost:4000/hello 15.3 document_title document_title HelloView.document_title def document_title(assigns) do "ModestGreeter (#{assigns.name})" end assings render 3 136
15.3 document_title assigns.name "ModestGreeter (Alice)" TopView.document_title def document_title(_assigns) do "ModestGreeter" end "ModestGreeter" web/templates/top/index.html.eex <h1 class="display-3"><%= document_title(assigns) %></h1> TopView document_title TopView TopController assigns render 3 <title><%= @view_module.document_title assigns %></title> @view_module TopController TopView HelloController HelloView @view_module.document_title document_title 137
15 15.4 URL /about TopController about web/router.ex : 12 scope "/", ModestGreeter do 13 pipe_through :browser 14 15 get "/", TopController, :index 16 + get "/about", TopController, :about 17 get "/hello/:name", HelloController, :show 18 get "/hello", HelloController, :show 19 end 20 end TopController about web/controllers/top_controller.ex 1 defmodule ModestGreeter.TopController do 2 use ModestGreeter.Web, :controller 3 4 def index(conn, _params) do 5 render conn, "index.html" 6 end 7 + 8 + def about(conn, _params) do 9 + render conn, "about.html" 10 + end 11 end 138
15.5 case app/templates/top/about.html.eex (New) 1 <div class="m-1"> 2 <h1> </h1> 3 <p>modestgreeter Elixir/Phoenix Phoenix </p> 4 </div> http://localhost:4000/about 15.3 15.3 15.5 case Elixir case Elixir 139
15 Elixir n = 1 case n do 1 -> IO.puts "A" 2 -> IO.puts "B" _ -> IO.puts "C" end Elixir A n 1 2 5 C case case do do end -> n 1 2 _ n 1 IO.puts "A" 2 IO.puts "B" _ n 1 2 IO.puts "C" Ruby Ruby n = 1 case n when 1 then puts "A" when 2 then puts "B" else puts "C" end 15.6 document_title render 140
15.6 :view_template TopView web/views/top_view.ex 1 defmodule ModestGreeter.TopView do 2 use ModestGreeter.Web, :view 3 4 - def document_title(_assigns) do 4 + def document_title(assigns) do 5 - "ModestGreeter" 5 + case assigns.view_template do 6 + "about.html" -> "ModestGreeter - " 7 + _ -> "ModestGreeter" 8 + end 9 end 10 end case assigns.view_template "about.html" "ModestGreeter - " "ModestGreeter" 141