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

Laravel-generator 代码生成包

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

  1. 前端根据组件生成
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

@vinhson 对的 都是为了方便自己的开发习惯

3年前 评论
fatrbaby

spring框架的作者Rod Johnson曾经说过一句话让我思考很久:『能够被生成的代码,为什么要生成他』?

3年前 评论
Hogen (楼主) 3年前

让我想起以前的写的: 最近写了几个 Laravel 扩展用来减少工作的麻烦

Resource + Repository + Model + Laravel-admin控制器自动生成&路由文件生成& 字段翻译

后面我删了这些扩展包,几乎不用,还增加系统复杂度。

MVC 大法好, 什么Repository + Service... 都是 邪门歪道 (手动狗头)

3年前 评论
Hogen (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!