iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
1
Modern Web

用Elixir學習後端煉金術系列 第 22

Day 22 |> Phoenix |> 目錄結構

mix.exs
如同一般的elixir專案,記錄了相關的資訊,且可以在 deps 內看到,Phoenix已經把許多 web 相關的套件給加進來了。
其中包刮了 ecto 以及之前提到的 cowboy,以及html的模板工具等套件

  defp deps do
    [
      {:phoenix, "~> 1.5.3"},
      {:phoenix_ecto, "~> 4.1"},
      {:ecto_sql, "~> 3.4"},
      {:postgrex, ">= 0.0.0"},
      {:phoenix_html, "~> 2.11"},
      {:phoenix_live_reload, "~> 1.2", only: :dev},
      {:phoenix_live_dashboard, "~> 0.2.0"},
      {:telemetry_metrics, "~> 0.4"},
      {:telemetry_poller, "~> 0.4"},
      {:gettext, "~> 0.11"},
      {:jason, "~> 1.0"},
      {:plug_cowboy, "~> 2.0"}
    ]
  end

而依照慣例,專案的程式邏輯或放在lib目錄下

lib/sample_project/application.ex
在這個檔案中,定義了我們專案運行後需要啟用的所有服務,是這個專案最上層的模組。
children中的模組會透過監督樹的機制開始運行,在運行失敗時會被母節點重新啟動。

children = [
      # Ecto repository 模組
      SampleProject.Repo,
      # Web樣板相關的模組
      SampleProjectWeb.Telemetry,
      # Start the PubSub system
      {Phoenix.PubSub, name: SampleProject.PubSub},
      # Web相關的模組的進入點
      SampleProjectWeb.Endpoint
      # Start a worker by calling: SampleProject.Worker.start_link(arg)
      # {SampleProject.Worker, arg}
    ]

lib/sample_project_web.ex
web相關模組們的進入點,包刮 controllers, views, router 等,若是共用邏輯,可以寫在這邊。

  def controller do
    quote do
      use Phoenix.Controller, namespace: SampleProjectWeb

      import Plug.Conn
      import SampleProjectWeb.Gettext
      alias SampleProjectWeb.Router.Helpers, as: Routes
    end
  end

.......
.......

lib/sample_project_web
這個目錄存放了web相關的模組,包刮controllers, views, router等。


當我們在瀏覽器下了一個請求後,他會進入lib/sample_project_web/router.ex 匹配對應的路由,例如
http://localhost:4000/ 會匹配到 PageController 下的 index 這個函式。

lib/sample_project_web/controllers/page_controller.ex

scope "/", SampleProjectWeb do
    pipe_through :browser

    get "/", PageController, :index
  end

然後,經過 render 這個函式指定要渲染的模板,並且會對應到同 controller 名稱的資料夾下的模板,例如這邊會對應到 page/index.eex,eex 是 Phoenix 所指用的模板語言,夠過這種方式,可以把資料渲染到畫面上。

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

https://ithelp.ithome.com.tw/upload/images/20201007/20111629zN96E7W4Ns.png

最終變會顯示頁面了。


上一篇
Day 21 |> Phoenix |> 創建專案
下一篇
Day 23 |> Phoenix |> 使用 Ecto 存取資料
系列文
用Elixir學習後端煉金術30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言