dev-lnk/moonshine-builder
Composer 安装命令:
composer require dev-lnk/moonshine-builder
包简介
Project builder for MoonShine
关键字:
README 文档
README
Создание проектов с использованием схем для 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-json {target?}- генерация из JSON-схемыphp artisan moonshine:build-table {target?}- генерация из SQL-таблицыphp artisan moonshine:build-resource {entity?} {fields?*}- генерация из консолиphp artisan moonshine:build-model {entity?} {--all}- генерация из существующей модели
Методы генерации кода
Создание из 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
Или использовать специализированную команду:
php artisan moonshine:build-table users
Результат:
/** * @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
Или используйте специализированную команду:
php artisan moonshine:build-json 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 - генерации админ-панели с помощью ИИ
dev-lnk/moonshine-builder 适用场景与选型建议
dev-lnk/moonshine-builder 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 5.68k 次下载、GitHub Stars 达 25, 最近一次更新时间为 2024 年 04 月 09 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「builder」 「moonshine」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 dev-lnk/moonshine-builder 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 dev-lnk/moonshine-builder 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 dev-lnk/moonshine-builder 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
User permissions for MoonShine
Field for repeating groups of fields for MoonShine
A Sphinx Query Builder extension for the Laravel Database package
Anax Database Active Record module for model classes.
Task scheduling extension for MoonShine
Ace editor for MoonShine
统计信息
- 总下载量: 5.68k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 25
- 点击次数: 2
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-04-09
