gian_tiaga/code-generator
3,757
3
| Install | |
|---|---|
composer require gian_tiaga/code-generator |
|
| Latest Version: | 2.0.0 |
| PHP: | ^8.2 |
| License: | MIT |
| Last Updated: | Sep 24, 2024 |
| Links: | GitHub · Packagist |
Maintainer: gian_tiaga
Мотивация
На гитхабе есть несколько хороших генераторов кода, но все они не устроили по нескольким причинам, вот что есть в этом пакете чего нет в других:
- 1 раз описываем схему из которой формируются разные сущности
- Расширяемость плагинами, можно написать свои плагины и из той же схемы генерировать ваши данные
- Схема описывается через вызовы нужных классов, в отличии от json вам не нужно помнить какие возможности есть
- Для генераторов используются привычные blade шаблоны, что даёт большию гибкость чем привычные stub файлы
Установка
composer require gian_tiaga/code-generator
Как использовать
- Создать директорию с файлами описывающие ваши сущности
Пример:
app/CodeGenerator/1000_users.php
<?php
use GianTiaga\CodeGenerator\Builders\TableBuilder;
use GianTiaga\CodeGenerator\Columns\Fields\DateTime;
use GianTiaga\CodeGenerator\Columns\Fields\Email;
use GianTiaga\CodeGenerator\Columns\Fields\ID;
use GianTiaga\CodeGenerator\Columns\Fields\Password;
use GianTiaga\CodeGenerator\Columns\Fields\Phone;
use GianTiaga\CodeGenerator\Columns\Fields\Text;
use GianTiaga\CodeGenerator\Columns\Fields\Timestamps;
use GianTiaga\CodeGenerator\Columns\Relations\BelongsToMany;
use GianTiaga\CodeGenerator\Dto\ClassNameDto;
use GianTiaga\CodeGenerator\Dto\IndexDto;
use GianTiaga\CodeGenerator\Plugins\MigrationPlugin\Builders\MigrationBuilder;
use GianTiaga\CodeGenerator\Plugins\ModelPlugin\Builders\ModelBuilder;
use GianTiaga\CodeGenerator\Plugins\MoonshinePlugin\Builders\MoonshineBuilder;
use Illuminate\Notifications\Notifiable;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\Permission\Traits\HasRoles;
return TableBuilder::make('users', 'Пользователи')
->setMigrationBuilder(
MigrationBuilder::make()
->addToUniques(new IndexDto(['first_name']))
->addIndex(new IndexDto(['last_name']))
)
->setModelBuilder(
ModelBuilder::make()
->setExtends(new ClassNameDto(
\Illuminate\Foundation\Auth\User::class,
'Authenticatable'
))
->addImplement(new ClassNameDto(HasMedia::class))
->addUse(new ClassNameDto(HasRoles::class))
->addUse(new ClassNameDto(InteractsWithMedia::class))
->addUse(new ClassNameDto(Notifiable::class))
)
->setMoonshineBuilder(
MoonshineBuilder::make(),
)
->setColumns([
ID::make()
->sortable(),
Text::make('first_name', 'Имя')
->filterable()
->searchable()
->sortable()
->required(),
Text::make('last_name', 'Фамилия')
->filterable()
->searchable()
->sortable()
->searchable(),
Email::make('email', 'Email')
->filterable()
->searchable()
->sortable()
->required()
->unique(),
Phone::make('phone', 'Телефон')
->filterable()
->searchable()
->sortable()
->required()
->unique()
->setComment('Уже отформатированный'),
Password::make('password', 'Пароль')
->required(),
Text::make('remember_token')
->setInMoonshineResource(false),
DateTime::make('email_verified_at')
->setInMoonshineResource(false),
BelongsToMany::make('roles', 'Роли')
->filterable()
->setInMigration(false)
->setInModel(false)
->required(),
Timestamps::make(),
]);
- Создать консольную команду для выполнения генерации
Пример
<?php
namespace App\Console\Commands;
use GianTiaga\CodeGenerator\Builders\CodeGenerator;
use GianTiaga\CodeGenerator\Plugins\MigrationPlugin\MigrationPlugin;
use GianTiaga\CodeGenerator\Plugins\ModelPlugin\ModelPlugin;
use GianTiaga\CodeGenerator\Plugins\MoonshinePlugin\MoonshinePlugin;
use Illuminate\Console\Command;
class GenerateCode extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'app:generate-code';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Run Code Generator';
/**
* Execute the console command.
* @throws \Throwable
*/
public function handle(): void
{
CodeGenerator::make()
->registerPlugins([
new MigrationPlugin(),
new ModelPlugin(),
new MoonshinePlugin(),
])
->setTablesFromDir(app_path('CodeGenerator'))
->generate();
exec('./vendor/bin/pint database/migrations');
exec('./vendor/bin/pint app/Models');
exec('./vendor/bin/pint app/MoonShine');
}
}
В результате этого кода мы получаем 3 файла
- Миграция
- Модель
- Moonshine Resource
TODO
TODO Command
- Create file of scheme
TODO Fields
- Enum
- Select
- Default Image for Moonshine
- Default File for Moonshine
- Morph Fields
TODO Plugins
- Policies
- Factories
- Api Resources
- Request
- CRUD Actions with CRUD DTO
- CRUD Controllers
Related Packages
erirk/paypalpayment
laravel-paypalpayment is simple package help you process direct credit card paym...
0
doctrine/dbal
Powerful PHP database abstraction layer (DBAL) with many features for database s...
631,580,251
9,707