hogen / laravel-generator
code generator for laravel
Installs: 13
Dependents: 0
Suggesters: 0
Security: 0
Stars: 4
Watchers: 1
Forks: 0
Open Issues: 0
Type:package
Requires
- php: ^7.0
- illuminate/http: ^7.0
- illuminate/support: ^7.0
README
Introduction
由于最近在做后台,需要类似于Gii的代码生成包,网上可能有比较丰富的包,不过没去了解过,就根据自己习惯随手写了个方便自己使用的包,写的比较匆忙所以代码可能比较粗糙。目前只写了后端的,前端有时间在写。
- 根据自定义框架目录,修改*.stub生成自定义的初始代码
- 支持
model + filter + request + resource + service + controller + migration + test
- 自动读取同名数据表并填充到
model + resource + migration
的字段
Installation
composer require hogen/laravel-generator
php artisan vendor:publish --tag=generator
# 如更新出现问题,执行 composer remove hogen\laravel-generator 并把 app\Console\Commmands\Generator 删除
- config/app.php
'providers' => [ ··· App\Console\Commands\Generator\GeneratorServiceProvider::class ];
Run
- 请先根据自己的框架目录和代码格式修改默认代码格式stub文件
## 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
Deployment自定义配置
Generator\MakeResource.php
protected $types = [ 'model', 'request', 'resource', 'service', 'controller', 'test', 'migration' ];
- 选择需要生成的组件,filter和test默认不开启
- 有先后顺序之分,需按照上图顺序填写
目录规则
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' => ''], ];
- 在此修改各模块的路径规则设置,会影响各文件的命名空间和类名
- inBaseDir决定是否在BaseDir内,默认
Http
- prefix决定是否在二级前缀内
Filter筛选器
protected $createFilter = false; protected $baseFilterHelperPath = "Models\Traits\Filter";
- 默认不开启
- 生成的filter基类的路径 例: App/Models/Traits/Filter.php
- 路径生成只遵循$pathFormat中model的inBaseDir规则,不遵循prefix,避免个trait的生成
数据库字段填充
/** * 手动配置 * 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 修改默认代码格式
- 参考各stub配置自定义默认格式
- 以下stub为简化后的代码习惯,按需修改
Generator\stubs\*.stub
<?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
- 前端根据组件生成