gian_tiaga / code-generator
2.0.0
2024-09-24 15:00 UTC
Requires
- php: ^8.2
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/framework: ^11.18
- laravel/pint: ^1.17
- moonshine/moonshine: ^3.0
- orchestra/testbench: ^9.2
README
动机
在GitHub上有很多很好的代码生成器,但它们由于几个原因都不尽人意,以下是这个包中包含的内容,而其他包中则没有:
- 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资源
待办事项
待办事项命令
- 创建方案文件
待办事项字段
- 枚举
- 选择
- Moonshine的默认图像
- Moonshine的默认文件
- 多态字段
待办事项插件
- 策略
- 工厂
- API资源
- 请求
- 带有CRUD DTO的CRUD操作
- CRUD控制器