Skip to content

dev-lnk/moonshine-builder

Repository files navigation

logo

Создание проектов с использованием схем для MoonShine.

Latest Stable Version Total Downloads tests License
Laravel required PHP required MoonShine required


Описание

Этот пакет позволяет создавать 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

About

Creating projects using schemas for the MoonShine.

Resources

License

Stars

Watchers

Forks

Languages