dev-lnk/moonshine-builder

Project builder for MoonShine

Installs: 3 925

Dependents: 0

Suggesters: 0

Security: 0

Stars: 25

Watchers: 3

Forks: 3

Open Issues: 0

pkg:composer/dev-lnk/moonshine-builder

3.1.1 2025-12-11 15:09 UTC

README

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 [
    // 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.

Методы генерации кода

Создание из 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

Результат:

/**
 * @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-схемы

Структура 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

Результат:

/**
 * @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 - генерации админ-панели с помощью ИИ