查看源代码 mix phx.gen.json (Phoenix v1.7.14)

为 JSON 资源生成控制器、JSON 视图和上下文。

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

第一个参数是上下文模块,后面跟着模式模块及其复数名称(用作模式表名)。

上下文是一个 Elixir 模块,充当给定资源的 API 边界。上下文通常包含许多相关资源。因此,如果上下文已经存在,它将被添加该资源的功能增强。

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

模式负责将数据库字段映射到 Elixir 结构。后面跟着一个可选的属性列表,包含它们的名称和类型。有关属性的更多信息,请参阅 mix phx.gen.schema

总的来说,此生成器将在 lib/ 中添加以下文件

  • 一个上下文模块位于 lib/app/accounts.ex 中,用于帐户 API
  • 一个模式位于 lib/app/accounts/user.ex 中,带有 users
  • 一个控制器位于 lib/app_web/controllers/user_controller.ex
  • 一个 JSON 视图与控制器并置,位于 lib/app_web/controllers/user_json.ex

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

API 前缀

默认情况下,将为 API 路由路径生成前缀“/api”。这可以通过 :api_prefix 生成器配置进行自定义

config :your_app, :generators,
  api_prefix: "/api/v1"

上下文应用程序

在伞形应用程序中,Web 文件(控制器、JSON 视图等)的位置将根据应用程序 :generators 配置中的 :context_app 配置而有所不同。设置后,Phoenix 生成器将在您的 lib 和测试文件夹中直接生成 Web 文件,因为假设应用程序是隔离的,只包含 Web 特定功能。如果没有设置 :context_app,生成器会将 Web 相关的 lib 和测试文件放在 web/ 目录中,因为假设应用程序同时处理 Web 和域特定功能。示例配置

config :my_app_web, :generators, context_app: :my_app

或者,可以使用 --context-app 选项传递给生成器

mix phx.gen.json Sales User users --context-app warehouse

Web 命名空间

默认情况下,控制器和 JSON 视图将使用模式名称进行命名空间。您可以通过传递带有模块名称的 --web 标志来自定义 Web 模块命名空间,例如

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

这将生成 lib/app_web/controllers/sales/user_controller.exlib/app_web/controller/sales/user_json.ex

自定义上下文、模式、表和迁移

在某些情况下,您可能希望引导 JSON 视图、控制器和控制器测试,但将上下文的内部实现或模式留给自己。您可以使用 --no-context--no-schema 标志来控制文件生成。

您还可以更改表名或配置迁移以使用二进制 ID 作为主键,有关更多信息,请参阅 mix phx.gen.schema