Spec-Zone.ru › Phoenix

mix phx.gen.json

Исходный код

Генерирует контроллер, JSON-представление и контекст для ресурса JSON.

Формат:

$ mix phx.gen.json [<context>] <schema> <table> <attr:type> [<attr:type>...]

Например:

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

Будет создана схема User для таблицы users в контексте Users с атрибутами name (строка) и age (целое число).

Вы также можете явно передать имя контекста в качестве аргумента, если контекст хорошо определён:

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

Первый аргумент — модуль контекста (Accounts), за которым следуют модуль схемы (User), имя таблицы (users) и атрибуты.

Контекст — это модуль Elixir, который служит границей API для заданного ресурса. Контекст часто содержит множество связанных ресурсов. Поэтому, если контекст уже существует, он будет дополнен функциями для заданного ресурса.

Схема отвечает за отображение полей базы данных в структуру 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"

Области видимости

Если в приложении настроена собственная область видимости по умолчанию, этот генератор автоматически обеспечит правильное применение областей видимости ко всем операциям контекста. Чтобы отключить применение областей видимости, передайте флаг --no-scope.

Конфигурация umbrella-приложения

По умолчанию Phoenix внедряет функциональность веб-уровня и предметной области в одно приложение. При использовании umbrella-приложений эти задачи обычно разделяют между двумя отдельными приложениями: приложением контекста — назовём его my_app — и его веб-уровнем, которым Phoenix считает my_app_web.

Вы можете настроить Phoenix на использование такого подхода с помощью параметра конфигурации :context_app в файле my_app_umbrella/config/config.exs:

config :my_app_web,
  ecto_repos: [Stuff.Repo],
  generators: [context_app: :my_app]

Кроме того, параметр --context-app можно передать генератору:

$ mix phx.gen.html Accounts User users --context-app my_app

Пространство имён веб-уровня

По умолчанию контроллер и HTML-представления не помещаются в пространство имён, но его можно добавить, передав флаг --web с именем модуля, например:

$ mix phx.gen.json Accounts User users --web Accounts

В результате будут созданы lib/app_web/controllers/accounts/user_controller.ex и lib/app_web/controllers/accounts/user_json.ex.

Настройка контекста, схемы, таблиц и миграций

В некоторых случаях может потребоваться создать JSON-представления, контроллеры и тесты контроллеров, оставив внутреннюю реализацию контекста или схемы за собой. Для управления созданием файлов можно использовать флаги --no-context и --no-schema. Обратите внимание: --no-context подразумевает --no-schema:

$ mix phx.gen.live Accounts User users --no-context name:string

В перечисленных выше случаях тесты всё равно создаются, но все они будут завершаться с ошибкой.

Вы также можете изменить имя таблицы или настроить использование двоичных идентификаторов для первичных ключей в миграциях. Дополнительную информацию см. в разделе mix phx.gen.schema.

Пакет Hex Предпросмотр Hex Скачать версию ePub

Создано с помощью ExDoc (v0.40.3) для языка программирования Elixir

© 2014 Chris McCord
Licensed under the MIT License.
https://phoenix.hexdocs.pm/Mix.Tasks.Phx.Gen.Json.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API