Создание проектов с использованием схем для MoonShine.
- Описание
- Установка
- Конфигурация
- Быстрый старт
- Методы генерации кода
- Массовый импорт таблиц
- Использование в других проектах
Этот пакет позволяет создавать Resource, Model и Migration со всеми полями, используя методы генерации из:
Пакет генерирует следующие файлы:
composer require dev-lnk/moonshine-builder --devОпубликуйте файл конфигурации пакета:
php artisan vendor:publish --tag=moonshine-builderВ файле конфигурации укажите путь к вашим JSON-схемам:
return [
// Directory where schematic files in json, yaml, etc. are stored.
'builds_dir' => base_path('builds'),
// Base path for models directory.
'base_model_path' => 'app/Models',
// Notification of duplicate files of models and resources with a new generation.
'is_confirm_replace_files' => true,
// Ask about adding a new resource to the provider.
'is_confirm_change_provider' => false,
// Ask about adding a new resource to the menu.
'is_confirm_change_menu' => false,
];Выполните команду:
php artisan moonshine:build
Вам будут предложены варианты выбора методов генерации кода, например:
┌ Type ────────────────────────────────────────────────────────┐
│ ○ table │
│ › ● json │
│ ○ console │
│ ○ model │
└──────────────────────────────────────────────────────────────┘При выборе варианта 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!
INFO All done.
Команда имеет следующую сигнатуру moonshine:build {target?} {--type=}, где:
target- сущность, по которой будет выполнена генерация,type- тип или метод генерации, доступноtable,json,console,model.
Вы можете создать ресурс, используя схему таблицы. Для этого выполните команду php artisan moonshine:build и выберите вариант table:
┌ Type ────────────────────────────────────────────────────────┐
│ › ● table │
│ ○ json │
│ ○ console │
└──────────────────────────────────────────────────────────────┘Выберите необходимую таблицу:
┌ Table ───────────────────────────────────────────────────────┐
│ ○ password_reset_tokens │ │
│ ○ sessions │ │
│ ○ statuses │ │
│ ○ tasks │ │
│ › ● users ┃ │
└──────────────────────────────────────────────────────────────┘Вы можете сразу указать название таблицы и тип генерации. Пример:
php artisan moonshine:build users --type=tableРезультат:
/**
* @return list<ComponentContract|FieldContract>
*/
protected function fields(): 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'),
];
}Структура 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Результат:
/**
* @return list<ComponentContract|FieldContract>
*/
protected function fields(): 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
Если у вас уже есть готовая модель Laravel с определёнными полями, связями и настройками, вы можете сгенерировать MoonShine Resource на основе этой модели. Выполните команду php artisan moonshine:build и выберите вариант model:
┌ Type ────────────────────────────────────────────────────────┐
│ ○ table │
│ ○ json │
│ ○ console │
│ › ● model │
└──────────────────────────────────────────────────────────────┘Затем выберите нужную модель из списка доступных:
┌ Select models (use Space to select, Enter to confirm): ──────┐
│ ◻ app/Models/Category.php │ │
│ ◻ app/Models/Comment.php │ │
│ ◻ app/Models/Product.php │ │
│ ◻ app/Models/Rating.php │ │
│ ◻ app/Models/Review.php │ │
│ ◻ app/Models/Tag.php │ │
└────────────────────────────────────────────────── 0 selected ┘Вы также можете сразу указать модель для генерации:
php artisan moonshine:build-model Productили с полным именем класса:
php artisan moonshine:build-model "App\Models\Product"Генерация ресурсов для всех моделей
Если вам нужно создать ресурсы для всех моделей в директории, используйте флаг --all:
php artisan moonshine:build-model --allЭта команда автоматически просканирует директорию с моделями и создаст ресурсы для каждой найденной модели.
Пакет автоматически проанализирует модель и создаст:
- Resource с полями на основе структуры таблицы
- Связи (HasMany, BelongsTo, BelongsToMany, HasOne) на основе методов модели
- Правильные типы полей на основе типов колонок в базе данных
- Настройки timestamps и soft deletes, если они используются в модели
Настройка директории моделей
По умолчанию пакет ищет модели в директории app/Models. Вы можете изменить это в файле конфигурации:
'base_model_path' => 'app/Models',Если у вас уже есть проект с собственной базой данных и вы не хотите генерировать ресурсы по одному, используйте следующую команду:
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
- MoonVibe - генерации админ-панели с помощью ИИ
