隨手搞個自用的程式碼生成包laravel-generator

2020-09-28 15:01:05

下面由教學欄目給大家介紹程式碼生成包laravel-generator,希望對需要的朋友有所幫助!

Laravel-generator 程式碼生成包

https://github.com/HogenYuan/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
  • 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

  1. 前端根據元件生成

以上就是隨手搞個自用的程式碼生成包laravel-generator的詳細內容,更多請關注TW511.COM其它相關文章!