mix phx.gen.live
Исходный кодСоздаёт LiveView, шаблоны и контекст для ресурса.
Формат:
$ mix phx.gen.live [<context>] <schema> <table> <attr:type> [<attr:type>...]
Например:
$ mix phx.gen.live User users name:string age:integer
Будет создана схема User для таблицы users в контексте Users с атрибутами name (строка) и age (целое число).
Если контекст определён однозначно, его имя также можно указать явно в качестве аргумента:
$ mix phx.gen.live 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 - LiveView в
lib/app_web/live/user_live/show.ex - LiveView в
lib/app_web/live/user_live/index.ex - LiveView в
lib/app_web/live/user_live/form.ex - модуль компонентов в
lib/app_web/components/core_components.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.Form, :new live "/users/:id", UserLive.Show, :show live "/users/:id/edit", UserLive.Form, :edit
Области видимости
Если в конфигурации приложения задана собственная область видимости scope по умолчанию, этот генератор автоматически обеспечит правильное применение областей видимости ко всем операциям контекста. Чтобы отключить применение областей видимости, передайте флаг --no-scope.
Конфигурация зонтичного приложения
По умолчанию Phoenix добавляет функциональность веб-уровня и предметной области в одно приложение. В зонтичных приложениях эти компоненты обычно разделены на два приложения: приложение контекста — назовём его 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
Пространство имён веб-уровня
По умолчанию модули LiveView определяются в папке с именем схемы, например lib/app_web/live/user_live. Можно добавить дополнительные пространства имён, передав флаг --web с именем модуля, например:
$ mix phx.gen.live Accounts User users --web Accounts name:string
В результате LiveView будут созданы в lib/app_web/live/accounts/user_live/, в пространстве имён AppWeb.Accounts.UserLive вместо AppWeb.UserLive.
Настройка контекста, схемы, таблиц и миграций
В некоторых случаях может потребоваться создать HTML-шаблоны, LiveView и тесты, но самостоятельно реализовать внутреннюю часть контекста или схемы. Для управления генерацией файлов можно использовать флаги --no-context и --no-schema. Обратите внимание: --no-context подразумевает --no-schema:
$ mix phx.gen.live Accounts User users --no-context name:string
В перечисленных выше случаях тесты всё равно создаются, но все они завершатся с ошибкой.
Также можно изменить имя таблицы или настроить миграции для использования двоичных идентификаторов в качестве первичных ключей. Подробнее см. в разделе mix help phx.gen.schema.
© 2014 Chris McCord
Licensed under the MIT License.
https://phoenix.hexdocs.pm/Mix.Tasks.Phx.Gen.Live.html