github.com/HogenYuan/laravel-gener...
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
- 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
- 前端根據元件生成
本作品採用《CC 協議》,轉載必須註明作者和本文連結