查看原始碼 mix phx.gen.html (Phoenix v1.7.14)

為 HTML 資源產生具有檢視、範本、架構及背景的控制器。

mix phx.gen.html Accounts User users name:string age:integer

第一個參數 Accounts 是資源的背景。背景是 Elixir 模組,用於密切相關資源的 API 邊界。

第二個參數 User 是資源的架構。架構是 Elixir 模組,負責將資料庫欄位對應到 Elixir 結構。上述 User 架構指定兩個欄位及個別對應資料型別:name:stringage:integer。如需更多屬性說明,請參閱 mix phx.gen.schema

注意:一個資源也可以拆分到不同的背景中 (例如 Accounts.UserPayments.User)。

此產生器將加入下列檔案至 lib/

  • lib/my_app_web/controllers/user_controller.ex 中的控制器
  • lib/my_app_web/controllers/user_html 中的預設 CRUD HTML 範本
  • 與控制器並置的 HTML 檢視,位於 lib/my_app_web/controllers/user_html.ex
  • lib/my_app/accounts/user.ex 中擁有 users 表格的架構
  • 用於帳戶 API 的 lib/my_app/accounts.ex 中的背景模組

此外,此產生器產出下列檔案

  • priv/repo/migrations 中的架構遷移
  • test/my_app/controllers/user_controller_test.exs 中的控制器測試模組
  • test/my_app/accounts_test.exs 中的背景測試模組
  • test/support/fixtures/accounts_fixtures.ex 中的背景測試說明模組

如果背景已存在,此產生器會將給定資源的函式注入到背景、背景測試及背景測試說明模組中。

傘狀應用程式組態

預設情況下,Phoenix 將網頁和特定網域功能注入相同的應用程式。使用傘狀應用程式時,這些考量通常會被拆分為兩個獨立的應用程式,您的背景應用程式 (假設稱為 my_app) 及其網頁層 (Phoenix 假設為 my_app_web)。

您可以透過 my_app_umbrella/config/config.exs 中的 :context_app 組態選項,教導 Phoenix 使用此樣式

config :my_app_web,
  ecto_repos: [Stuff.Repo],
  generators: [context_app: :my_app]

或者,--context-app 選項可以提供給產生器

mix phx.gen.html Sales User users --context-app my_app

如果你刪除了 :context_app 組態選項,Phoenix 會自動將產生的網頁檔案放置於 my_app_umbrella/apps/my_app_web_web

如果你將 :context_app 的值改為 :new_valuemy_app_umbrella/apps/new_value_web 必須已經存在,否則你將會收到以下錯誤訊息

** (Mix) 找不到 my_app_web 的依賴項中對應於 context_app :new_value 的目錄。**

Web 名稱空間

預設情況下,控制器和 HTML 檢視會依據架構名稱命名為名稱空間。你可以透過傳遞 --web 旗標,並指定模組名稱來自訂網頁模組的名稱空間,例如

mix phx.gen.html Sales User users --web Sales

這樣會產生 lib/app_web/controllers/sales/user_controller.exlib/app_web/controllers/sales/user_html.ex

自訂內容、架構、表格和遷移

在某些情況下,你可能希望初始化 HTML 範本、控制器和控制器測試,但保留內容或架構的內部實作。你可以使用 --no-context--no-schema 旗標來控制檔案產生。

你也可以變更表格名稱或設定遷移來使用二進位 ID 做為主鍵,詳情請參閱 mix phx.gen.schema