Laravel-generator 代碼生成包
Introduction
由於最近在做後臺,需要類似於Gii的代碼生成包,網上可能有比較豐富的包,不過沒怎麼去了解過,就根據自己習慣隨手寫了個方便自己使用的包,寫的比較匆忙所以代碼可能比較粗糙。目前只寫了後端的,前端有時間在寫。
1. 根據自定義框架目錄,修改*.stub生成自定義的初始代碼
2. 支持model + filter + request + resource + service + controller + migration + test
3. 自動讀取同名數據表並填充到 model + resource + migration 的欄位
Installation
composer require hogen\laravel-generator
php artisan vendor:publish --tag=generator'providers' => [ ··· App\Console\Commands\Generator\GeneratorServiceProvider::class];Run
## 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\ExampleDeployment自定義配置
Generator\MakeResource.php
protected $types = [
'model', 'request', 'resource', 'service', 'controller', 'test', 'migration'];目錄規則
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' => ''],];Filter篩選器
protected $createFilter = false;protected $baseFilterHelperPath = "Models\Traits\Filter";資料庫欄位填充
protected $resourceNoFillableFields = [
'update_time',
'updated_time',
'delete_time',
'deleted_time',];
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
前端根據組件生成