查看源代码 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
  • lib/my_app/accounts.ex 中的用于账户 API 的上下文模块

此外,此生成器还创建以下文件

  • priv/repo/migrations 中的模式迁移
  • test/my_app/controllers/user_controller_test.exs 中的控制器测试模块
  • test/my_app/accounts_test.exs 中的上下文测试模块
  • test/support/fixtures/accounts_fixtures.ex 中的上下文测试助手模块

如果上下文已存在,此生成器将为给定资源注入函数到上下文、上下文测试和上下文测试助手模块中。

伞形应用程序配置

默认情况下,Phoenix 将 Web 和领域特定功能注入到同一个应用程序中。使用伞形应用程序时,这些问题通常会分解为两个独立的应用程序,您的上下文应用程序(我们称之为 my_app)及其 Web 层,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 将自动将生成的 Web 文件放在 my_app_umbrella/apps/my_app_web_web 中。

如果您将 :context_app 的值更改为 :new_value,则 my_app_umbrella/apps/new_value_web 必须已经存在,否则您将收到以下错误

** (Mix) 在 my_app_web 的依赖项中未找到 context_app :new_value 的目录。

Web 命名空间

默认情况下,控制器和 HTML 视图将以模式名称为命名空间。您可以通过使用带有模块名称的 --web 标志来自定义 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