檢視原始碼 mix phx.gen.live (Phoenix v1.7.14)
針對資源產生 LiveView、範本和內容。
mix phx.gen.live Accounts User users name:string age:integer
第一個參數是內容模組。內容是一個 Elixir 模組,用作給定資源的 API 邊界。一個內容通常包含許多相關資源。因此,如果內容已存在,它將會延伸給定資源的功能。
第二個參數是模式模組。該模式負責將資料庫欄位對應到一個 Elixir 構造。
其餘參數是模式模組的複數名稱(用作模式資料表名稱),以及一組選用的屬性(分別包含它們的名稱和類型)。請參閱 mix help phx.gen.schema
以取得更多關於屬性的資訊。
當第一次執行此指令時,將會建立一個 Components
模組(如果它不存在的話),以及資源層級的 LiveViews 與組件,包括新資源的 UserLive.Index
、UserLive.Show
和 UserLive.FormComponent
模組。
注意:一個資源也可以分佈在不同的內容中(例如:
Accounts.User
和Payments.User
)。
整體來說,這個產生器會加入下列檔案
- accounts API 中的 lib/app/accounts.ex 內容模組
- lib/app/accounts/user.ex 中的模式,搭配一個
users
資料表 - lib/app_web/live/user_live/show.ex 中的 LiveView
- lib/app_web/live/user_live/index.ex 中的 LiveView
- lib/app_web/live/user_live/form_component.ex 中的 LiveComponent
- lib/app_web/live/live_helpers.ex 中的輔助程式模組,搭配一個 modal
在檔案產生完成後,將會輸出關於 lib/app_web/router.ex 檔案所需更新的訊息。
Add the live routes to your browser scope in lib/app_web/router.ex:
live "/users", UserLive.Index, :index
live "/users/new", UserLive.Index, :new
live "/users/:id/edit", UserLive.Index, :edit
live "/users/:id", UserLive.Show, :show
live "/users/:id/show/edit", UserLive.Show, :edit
內容 app
也會產生一個給貯存庫的 migration 檔案,以及給內容和控制器功能的測試檔案。
在 umbrella 應用程式中,網路檔案(LiveView、檢視、範本等)的位置會根據位於應用程式 :generators
設定中的 :context_app
設定而有所不同。設定後,Phoenix 產生器會直接在您的 lib 及測試資料夾中產生網路檔案,因為應用程式假設被隔離到特定於網路的功能。如果未設定 :context_app
,產生器會將網路相關的 lib 和測試檔案放置在 web/
目錄中,因為假設應用程式同時處理網路和特定於網域的功能。範例設定
config :my_app_web, :generators, context_app: :my_app
或者,可以將 --context-app
選項提供給產生器
mix phx.gen.live Accounts User users --context-app warehouse
網路名稱空間
預設情況下,LiveView 模組將由網路模組命名空間化。您可以透過傳遞具有模組名稱的 --web
標誌,自訂網路模組名稱空間,例如
mix phx.gen.live Accounts User users --web Sales
這會在 lib/app_web/live/sales/user_live/
中產生 LiveView,將名稱空間命名為 AppWeb.Sales.UserLive
,而非 AppWeb.UserLive
。
自訂內容、架構、表格和遷移
在某些情況下,您可能希望引導 HTML 範本、LiveView 和測試,但保留內容或架構的內部實作。您可以使用 --no-context
和 --no-schema
標誌來控制檔案產生。
mix phx.gen.live Accounts User users --no-context --no-schema
在以上情況,測試仍然會產生,但它們都會失敗。
您也可以變更表格名稱或設定遷移以將二進位 ID 用於主鍵,請參閱 mix help phx.gen.schema
以取得更多資訊。