dev-lnk / moonshine-builder
Project builder for MoonShine
Requires
- php: ^8.2
Requires (Dev)
- moonshine/moonshine: 3.0.0-beta.2
- orchestra/testbench: ^9.0
- phpstan/phpstan: ^1.11
- phpunit/phpunit: ^11.0
README
Создание проектов с использованием схем для MoonShine.
Описание
Этот пакет позволяет создавать Resource, Model и Migration со всеми полями, используя методы генерации из:
Пакет генерирует следующие файлы:
Установка
composer require dev-lnk/moonshine-builder --dev
Конфигурация
Опубликуйте файл конфигурации пакета:
php artisan vendor:publish --tag=moonshine-builder
В файле конфигурации укажите путь к вашим JSON-схемам:
return [ 'builds_dir' => base_path('builds') ];
Быстрый старт
Выполните команду:
php artisan moonshine:build
Вам будут предложены варианты выбора методов генерации кода, например:
┌ Type ────────────────────────────────────────────────────────┐ │ ○ table │ │ › ● json │ │ ○ console │ └──────────────────────────────────────────────────────────────┘
При выборе варианта json
:
┌ File ────────────────────────────────────────────────────────┐ │ › ● category.json │ │ ○ project.json │ └──────────────────────────────────────────────────────────────┘
app/Models/Category.php was created successfully!
app/MoonShine/Resources/CategoryResource.php was created successfully!
database/migrations/2024_05_27_140239_create_categories.php was created successfully!
WARN Don't forget to register new resources in the provider method:
CategoryResource::class,
...or in the menu method:
MenuItem::make(
static fn() => 'CategoryResource',
CategoryResource::class
),
INFO All done.
Команда имеет следующую сигнатуру moonshine:build {target?} {--type=}
, где:
target
- сущность, по которой будет выполнена генерация,type
- тип или метод генерации, доступноtable
,json
,console
.
Методы генерации кода
Создание из SQL-таблицы
Вы можете создать ресурс, используя схему таблицы. Для этого выполните команду php artisan moonshine:build
и выберите вариант table
:
┌ Type ────────────────────────────────────────────────────────┐ │ › ● table │ │ ○ json │ │ ○ console │ └──────────────────────────────────────────────────────────────┘
Выберите необходимую таблицу:
┌ Table ───────────────────────────────────────────────────────┐ │ ○ password_reset_tokens │ │ │ ○ sessions │ │ │ ○ statuses │ │ │ ○ tasks │ │ │ › ● users ┃ │ └──────────────────────────────────────────────────────────────┘
Вы можете сразу указать название таблицы и тип генерации. Пример:
php artisan moonshine:build users --type=table
Результат:
public function indexFields(): iterable { return [ ID::make('id'), Text::make('name', 'name'), Text::make('email', 'email'), Date::make('email_verified_at', 'email_verified_at'), Text::make('password', 'password'), Text::make('remember_token', 'remember_token'), ]; } public function formFields(): iterable { return [ Box::make([ ...$this->indexFields() ]) ]; } public function detailFields(): iterable { return [ ...$this->indexFields() ]; }
Создание из JSON-схемы
Структура JSON. В директории builds_dir
создайте файл схемы, например, category.json
:
{ "resources": [ { "name": "Category", "fields": [ { "column": "id", "type": "id", "methods": [ "sortable" ] }, { "column": "name", "type": "string", "name": "Name" } ] } ] }
Чтобы сгенерировать файлы проекта, выполните команду:
php artisan moonshine:build category.json
Более подробный пример с множественными ресурсами и связями можно найти здесь.
Timestamps
Вы можете указать флаг timestamps: true
:
{ "resources": [ { "name": "Category", "timestamps": true, "fields": [] } ] }
Поля created_at
и updated_at
будут добавлены в сгенерированный код. Если вы укажете поля created_at
и updated_at
вручную, флаг timestamps
автоматически установится в true
.
Soft delete
Работает аналогично флагу timestamps
и полю deleted_at
.
Флаги для генерации файлов
С помощью флагов withResource
, withModel
, withMigration
вы можете настроить, что именно требуется сгенерировать для вашего ресурса:
{ "name": "ItemPropertyPivot", "withResource": false, "withModel": false }
Генерация из консоли
Выполните команду php artisan moonshine:build
и выберите вариант console
, либо выполните команду moonshine:build-resource
. Далее вам необходимо задать имя ресурса и описать все поля:
┌ Type ────────────────────────────────────────────────────────┐
│ console │
└──────────────────────────────────────────────────────────────┘
┌ Resource name: ──────────────────────────────────────────────┐
│ Status │
└──────────────────────────────────────────────────────────────┘
┌ Column: ─────────────────────────────────────────────────────┐
│ id │
└──────────────────────────────────────────────────────────────┘
┌ Column name: ────────────────────────────────────────────────┐
│ Id │
└──────────────────────────────────────────────────────────────┘
┌ Column type: ────────────────────────────────────────────────┐
│ id │
└──────────────────────────────────────────────────────────────┘
┌ Add more fields? ────────────────────────────────────────────┐
│ ● Yes / ○ No │
└──────────────────────────────────────────────────────────────┘
Вы можете сразу создать ресурс с полями, выполнив следующую команду:
php artisan moonshine:build-resource Status id:Id:id name:Name:string
Результат:
public function indexFields(): iterable { return [ ID::make('id'), Text::make('Name', 'name'), ]; }
Сигнатура команды moonshine:build-resource {entity?} {fields?*}
, где:
- entity - название ресурса,
- fields - поля для генерации вида name:Name:string или {column}:{columnName}:{type}
Все доступные {type} можно посмотреть, выполнив команду php artisan moonshine:build-types
Массовый импорт таблиц
Если у вас уже есть проект с собственной базой данных и вы не хотите генерировать ресурсы по одному, используйте следующую команду:
php artisan moonshine:project-schema
Сначала выберите все ваши pivot-таблицы для корректного формирования связи BelongsToMany, затем выберите все необходимые таблицы, для которых нужно сгенерировать ресурсы:
┌ Select the pivot table to correctly generate BelongsToMany (Press enter to skip) ┐ │ item_property │ └──────────────────────────────────────────────────────────────────────────────────┘ ┌ Select tables ───────────────────────────────────────────────┐ │ categories │ │ comments │ │ items │ │ products │ │ properties │ │ users │ └──────────────────────────────────────────────────────────────┘
Будет создана JSON-схема, которую при желании можно отредактировать и использовать:
project_20240613113014.json was created successfully! To generate resources, run:
php artisan moonshine:build project_20240613113014.json