The following tutorial column will introduce you to the code generation package laravel-generator. I hope it will be helpful to friends in need!
Laravel-generator code generation packagehttps://github.com/HogenYuan/laravel -generator
IntroductionSince I am working on the backend recently, I need a code generation package similar to Gii. There may be more abundant packages on the Internet. But I didn’t know much about it, so I just wrote a package that was convenient for me to use based on my own habits. I wrote it in a hurry, so the code may be rough. At present, I have only written the back-end, and I will be writing the front-end when I have time. 1. Modify *.stub to generate customized initial code based on the custom framework directory
2. Support
model filter request resource service controller migration test3. Automatically read the data table with the same name and fill in the fields of model resource migration
composer require hogen\laravel-generator
php artisan vendor:publish --tag=generator
'providers' => [ ··· App\Console\Commands\Generator\GeneratorServiceProvider::class];
Please modify the default according to your own framework directory and code format first Code format stub file
## name : 必填,短横式命名的资源名称}## --module= : 必填,指定三级模块(大小写规范) 如:GasStation/MainCard/Balance## --prefix= : 指定二级前缀(大小写规范) 默认:AdminApi## --baseDir= : 指定一级目录(大小写规范) 默认:Http## --force : 覆盖已存在文件## --filter : 使用filter筛选类## --test : 生成测试文件例子: //有大小写规范 * Path: App\Http\Controller\AdminApi\User\Example php artisan admin:make-resource testExample --force --baseDir=Http --prefix=AdminApi --module=User\Example * Path: App\Admin\Controller\User\Example php artisan admin:make-resource testExample --force --filter --baseDir=Admin --module=User\Example
Generator\MakeResource.php
protected $types = [ 'model', 'request', 'resource', 'service', 'controller', 'test', 'migration'];
Select the components that need to be generated. Filter and test are not enabled by default.
There is a sequence. You need to fill in the order according to the picture above
protected $pathFormat = [ 'model' => ['inBaseDir' => false, 'prefix' => ''], 'service' => ['inBaseDir' => false, 'prefix' => ''], 'test' => ['inBaseDir' => false, 'prefix' => true], 'request' => ['inBaseDir' => true, 'prefix' => true], 'resource' => ['inBaseDir' => true, 'prefix' => true], 'controller' => ['inBaseDir' => true, 'prefix' => true], 'migration' => ['inBaseDir' => false, 'prefix' => ''],];
Modify the path rule settings of each module here, which will affect the namespace and class name of each file
inBaseDir determines whether it is within BaseDir, the default is
Httpprefix determines whether it is within the secondary prefix
protected $createFilter = false;protected $baseFilterHelperPath = "Models\Traits\Filter";
Not enabled by default
Path path example of the generated filter base class: App/ Models/Traits/Filter.php
Path generation only follows the inBaseDir rules of the model in $pathFormat, and does not follow the prefix to avoid the generation of individual traits
/** * 手动配置 * resource文件中不需要添加到 $fillable 的字段 * * @var string[] */protected $resourceNoFillableFields = [ 'update_time', 'updated_time', 'delete_time', 'deleted_time',];/** * 手动配置 * model文件中不需要添加到 $fillable 的字段 * * @var string[] */protected $modelNoFillableFields = [ 'id', 'create_time', 'created_time', 'update_time', 'updated_time', 'delete_time', 'deleted_time',];
Code Format Modify the default code format
Refer to each stub configuration to customize the default format
The following stub is a simplified code habit, modify it as needed
<?php namespace DummyNamespace; use NamespacedDummyModel; use NamespacedDummyRequest; use NamespacedDummyResource; use NamespacedDummyService; use BaseNamespaceResource\EmptyResource; use BaseNamespaceController\Controller; class DummyClass extends Controller { public function index(DummyRequest $request){ $validated = $request->validated(); $dummyModels = DummyModel::query() ->filter($validated) ->orderByDesc('id') ->paginate(); return DummyResource::collection($dummyModels); } ··· }
TODO
The front end is generated based on the component
The above is the detailed content of Create your own code generation package laravel-generator. For more information, please follow other related articles on the PHP Chinese website!