查看源代码 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:string
和 age:integer
。有关属性的更多信息,请参阅 mix phx.gen.schema
。
注意:资源也可以分布在不同的上下文中(例如
Accounts.User
和Payments.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.ex
和 lib/app_web/controllers/sales/user_html.ex
。
自定义上下文、模式、表和迁移
在某些情况下,您可能希望引导 HTML 模板、控制器和控制器测试,但将上下文的内部实现或模式留给自己。您可以使用 --no-context
和 --no-schema
标志来控制文件生成。
您还可以更改表名或配置迁移以对主键使用二进制 ID,有关更多信息,请参阅 mix phx.gen.schema
。