查看源代码 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 模块不存在,将创建该模块,以及资源级别的 LiveView 和组件,包括 UserLive.IndexUserLive.ShowUserLive.FormComponent 模块,用于新的资源。

注意:资源也可以在不同的上下文中拆分(例如 Accounts.UserPayments.User)。

总的来说,这个生成器将添加以下文件:

  • 一个上下文模块,位于 lib/app/accounts.ex 中,用于账户 API
  • 一个模式,位于 lib/app/accounts/user.ex 中,带有一个 users
  • 一个 LiveView,位于 lib/app_web/live/user_live/show.ex
  • 一个 LiveView,位于 lib/app_web/live/user_live/index.ex
  • 一个 LiveComponent,位于 lib/app_web/live/user_live/form_component.ex
  • 一个助手模块,位于 lib/app_web/live/live_helpers.ex 中,带有一个模态框

文件生成完成后,将输出有关需要更新 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

上下文应用

还将生成一个用于存储库的迁移文件和用于上下文和控制器功能的测试文件。

伞形应用程序中 Web 文件(LiveView、视图、模板等)的位置将根据应用程序 :generators 配置中位于 :context_app 配置中的配置而有所不同。当设置时,Phoenix 生成器将直接在您的 lib 和测试文件夹中生成 Web 文件,因为该应用程序被假定为隔离到 Web 特定的功能。如果未设置 :context_app,生成器将在 web/ 目录中放置与 Web 相关的 lib 和测试文件,因为该应用程序被假定为同时处理 Web 和特定于域的功能。示例配置

config :my_app_web, :generators, context_app: :my_app

或者,也可以为生成器提供 --context-app 选项

mix phx.gen.live Accounts User users --context-app warehouse

Web 命名空间

默认情况下,LiveView 模块将由 Web 模块进行命名空间划分。您可以通过传递带有模块名称的 --web 标志来定制 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