Создание проектов с использованием схем для 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
.
Вы можете создать ресурс, используя схему таблицы. Для этого выполните команду 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. В директории 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: true
:
{
"resources": [
{
"name": "Category",
"timestamps": true,
"fields": []
}
]
}
Поля created_at
и updated_at
будут добавлены в сгенерированный код. Если вы укажете поля created_at
и updated_at
вручную, флаг timestamps
автоматически установится в true
.
Работает аналогично флагу 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