随手搞个自用的代码生成包laravel-generator

                                                       

下面由laravel教程栏目给大家介绍代码生成包laravel-generator,希望对需要的朋友有所帮助!

随手搞个自用的代码生成包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 hogenlaravel-generator  php artisan vendor:publish --tag=generator
  • config/app.php
'providers' => [      ···    AppConsoleCommandsGeneratorGeneratorServiceProvider::class];

Run

  • 请先根据自己的框架目录和代码格式修改默认代码格式stub文件
## name : 必填,短横式命名的资源名称}## --module= : 必填,指定三级模块(大小写规范) 如:GasStation/MainCard/Balance## --prefix= : 指定二级前缀(大小写规范) 默认:AdminApi## --baseDir= : 指定一级目录(大小写规范) 默认:Http## --force : 覆盖已存在文件## --filter : 使用filter筛选类## --test : 生成测试文件例子:  //有大小写规范  * Path: AppHttpControllerAdminApiUserExample   php artisan admin:make-resource testExample --force --baseDir=Http --prefix=AdminApi --module=UserExample  * Path: AppAdminControllerUserExample  php artisan admin:make-resource testExample --force --filter --baseDir=Admin  --module=UserExample

Deployment自定义配置

GeneratorMakeResource.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 = "ModelsTraitsFilter";
  • 默认不开启

  • 生成的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为简化后的代码习惯,按需修改

Generatorstubs*.stub

<?php namespace DummyNamespace;  use NamespacedDummyModel;  use NamespacedDummyRequest;  use NamespacedDummyResource;  use NamespacedDummyService;  use BaseNamespaceResourceEmptyResource;  use BaseNamespaceControllerController;  class DummyClass extends Controller  {      public function index(DummyRequest $request){          $validated = $request->validated();          $dummyModels = DummyModel::query()              -&gt;filter($validated)              -&gt;orderByDesc('id')              -&gt;paginate();          return DummyResource::collection($dummyModels);      }      ···  }

TODO

  1. 前端根据组件生成

以上就是随手搞个自用的代码生成包

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享