Skip to content

代码生成

代码生成 真的是每个项目都必备的了!代码生成一般都是为了减少curd的重复工作。因为后台管理的curd真的是必备的,所以代码生成还是很有必要的。目前代码生成可以自动生成以下文件

  • 控制器 Controller
  • 表单验证请求
  • 模型 Model
  • 自动写入 restful 路由
  • 数据库文件(migration)
  • 前端列表页面
  • 前端表单页面
  • 自动生成权限菜单

WARNING

  • 因为项目是前后端分离的,所以代码生成只能在开发环境使用
  • 代码生成工具并不是智能工具,它是根据已有信息渲染对应的模板

INFO

旧版本视频教程地址Catchadmin 专业版模块开发

基本使用

模块

众所周知,CatchAdmin 是模块化的,那么首先需要干什么呢?没错,就是新增模块。如下图所示 CatchAdmin 专业版代码生成 - Laravel Admin 点击新增按钮,按照提示信息输入模块信息,然后点击创建模块。

模块创建之后回生成如下文件,以本地 Test 模块为例,如下图所示 CatchAdmin 专业版代码生成 - Laravel Admin 来解释下具体文件信息

php
// 模块服务,用于加载模块的配置和事件的,在[模块化]章节有详细介绍
class TestServiceProvider extends CatchModuleServiceProvider
{
    /**
     * route path
     *
     * @return string
     */
    public function moduleName(): string
    {
        // TODO: Implement path() method.
        return 'test';
    }
}
php
// 模块路由
Route::prefix('test')->group(function () {
    Route::adminResource('pay/order/refunds', PayOrderRefundsController::class);

    Route::adminResource('admin/users', AdminUsersController::class);
    //next
});
php
// 模块安装器,在[模块化]章节有详细介绍
class Installer extends ModuleInstaller
{
    protected function info(): array
    {
        // TODO: Implement info() method.
        return [
            'title' => '测试',
            'name' => 'test',
            'path' => 'Test',
            'keywords' => 'test',
            'description' => 'test',
            'provider' => TestServiceProvider::class,
        ];
    }

    protected function requirePackages(): void
    {
        // TODO: Implement requirePackages() method.
    }

    protected function removePackages(): void
    {
        // TODO: Implement removePackages() method.
    }
}

模块创建完成之后,然后在创建 Schema,这里所谓的 schema 就是数据库的表,支持新建表,也支持已有表创建。

新建表

CatchAdmin 专业版代码生成 - Laravel Admin 按照提示填写表信息,然后点击下一步 CatchAdmin 专业版代码生成 - Laravel Admin 如图,需要在这里添加表字段,完成之后,点击创建即可。如下图 CatchAdmin 专业版代码生成 - Laravel Admin

已有表创建

从已有表里面创建对应生成表记录 CatchAdmin 专业版代码生成 - Laravel Admin

代码生成

schema 管理页面的点击对应记录生成代码按钮之后,进入到生成代码的页面 CatchAdmin 专业版代码生成 - Laravel Admin

参数

生成代码页面有几个比较重要的参数

  • 模块 是必选的,这保证代码生成到某个模块中
  • 控制器 名称是必填的,会在模块的 Http 目录下 Controller 文件
  • 模型名称 是默认根据表名称生成模型名称,是大驼峰的命名方式
  • 菜单名称 填写了菜单名称会自动生成权限管理的菜单,不填则不生成
  • 模型关联关系 支持生成模型关联关系
  • 操作 目前支持生成导出数据导出章节和导入数据导入章节
  • 分页是否支持分页
  • 是否生成表单
  • 是否使用动态表单,动态表单相关文档

表格和表单生成

INFO

注意代码生成的字段是支持拖拽的,你可以拖拽到合适的位置

表单组件

普通的自带组件这里就不多做解释了。来看看 catchadmin 新增的和后台强制绑定的组件

字典组件

CatchAdmin 专业版代码生成 字典组件 - Laravel Admin 生成的效果如下 CatchAdmin 专业版代码生成 字典组件 - Laravel Admin

附件上传组件

CatchAdmin 专业版代码生成 附件上传组件 - Laravel Admin

单图/多图上传组件

CatchAdmin 专业版代码生成 单图/多图上传组件 - Laravel Admin

单文件/多文件上传组件

CatchAdmin 专业版代码生成 单文件/多文件上传组件 - Laravel Admin

远程级联组件

远程组件需要选择数据源,如下图,其他远程组件类似,如果需要支持树形的话,要选择父级字段。 CatchAdmin 专业版代码生成 远程级联组件 - Laravel Admin

生成后的效果 CatchAdmin 专业版代码生成 远程级联组件 - Laravel Admin

远程下拉组件

CatchAdmin 专业版代码生成 远程下拉组件 - Laravel Admin

远程树形组件

CatchAdmin 专业版代码生成 远程下拉组件 - Laravel Admin

远程树形下拉组件

CatchAdmin 专业版代码生成 远程树形下拉组件 - Laravel Admin

图标选择组件

CatchAdmin 专业版代码生成 图标选择组件 - Laravel Admin

下拉

类似这种下拉选项的可以支持动态添加,例如 radio checkbox 等 CatchAdmin 专业版代码生成 下拉 - Laravel Admin

验证规则

INFO

验证规则是 Laravel 内置的验证规则,只支持部分前端规则

以下是前端验证的规则

  • required 必须填写
  • string 必须是字符串类型
  • url URL 格式不正确
  • number 必须是数字类型
  • email 邮箱格式不正确
  • boolean 必须是布尔类型
  • date 日期格式

验证规则会生成在,如下图 CatchAdmin 专业版代码生成 - Laravel Admin

后端

枚举

如果你使用的是下拉选项之类的,就是包含options选项的组件,后端会自动识别,并且生成文本返回。 例如状态字段,它的 options 选项如下

json
[
  {
    "label": "正常",
    "value": "1"
  },
  {
    "label": "禁用",
    "value": "2"
  }
]

那么模型会生成如下面的代码

php
/**
 * status 字段转换器
 *
 * @return Attribute
 */
public function statusText(): Attribute
{
    $text = [2 => '禁用', 1 => '正常'];

    return Attribute::make(get: fn ($value) => $text[$this->status] ?? '');
}

前端的状态字段也会自动使用status_text字段来渲染

图片

多图的情况下,会自动生成下面的代码,这里使用avatar字段演示

php
 /**
 * avatar 转换
 *
 * @return Attribute
 */
public function avatar(): Attribute
{
    return Attribute::make(
    get: fn ($value) => ! $value ? [] : array_map(fn ($item) => $item ? url($item) : '', json_decode($value, true)),
    set: fn ($value) => json_encode(array_map(fn ($value) => remove_app_url($value), $value))
    );
}

CatchAdmin 专业版代码生成,前端会自动生成图片展示 - Laravel Admin

Switch 组件

首先会在前端表格内生成一个switch组件,用于字段值切换 CatchAdmin 专业版代码生成,Switch 组件 - Laravel Admin 还会在对应的控制器生成如下代码,因为是 status 字段,所以生成下面的默认代码

php
public function enable(mixed $id): mixed
{
    return $this->model->toggleBy($id);
}

如果是其他非status字段则生成如下代码

php
public function enable(mixed $id, Request $request): mixed
{
    $field = $request->get('field');

    return $this->model->toggleBy($id, $field);
}

WARNING

这里需要注意的是,系统内置的状态切换的值,并不是 0 和 1。而是 1 是2 否,如果不是这么做的,需要你自己再模型重写 toggleBy 方法

导出

如图,选择你需要导出的字段 CatchAdmin 专业版代码生成,导出 组件 - Laravel Admin 最终代码生成一个导出得文件 modules/Test/Excel/Export/xxxxExport.php,文件内容如下

INFO

下面的代码仅作演示, 详细请参考导出数据文档

php

/**
 * 导出数据
 *
 *
 * @class Excel\Export\AdminUsersExport
 */
class AdminUsersExport extends Export
{
    protected array $header = [
        'id',
        '字典选择器',
        '图标选择',
        '远程树形',
        '文件上传',
        '但附件',
        '多附件上传',
        '图片上传',
        '多图片上传',
        '创建时间',
        '更新时间',
    ];

    /**
     * @return array
     */
    public function array(): array
    {
        return AdminUsers::query()->get()->select([
            'id',
            'username',
            'password',
            'avatar',
            'remember_token',
            'department_id',
            'status_text',
            'login_ip',
            'login_at',
            'created_at',
            'updated_at',
        ])->toArray();
    }
}

这里主要注意的是。代码生成器会在转换上面的枚举值,将对应的枚举值转换成中文说明

导入

跟导出是一样的,选择字段进行导入 CatchAdmin 专业版代码生成,导入 组件 - Laravel Admin 最终代码生成一个导出得文件 modules/Test/Excel/Export/xxxxImport.php,文件内容如下

INFO

下面的代码仅作演示, 详细请参考导入数据文档

php

/**
 * 导入数据
 *
 *
 * @class Excel\Import\AdminUsersImport
 */
class AdminUsersImport extends Import
{
    /**
     * 导入数据
     *
     *
     * @param  Collection  $rows
     * @return void
     */
    public function collection(Collection $rows): void
    {
        $rows->each(function ($row) {
            $model = new AdminUsers;
            $model->id = $row[0];
            $model->username = $row[1];
            $model->password = $row[2];
            $model->mobile = $row[3];
            $model->email = $row[4];
            $model->save();
        });
    }
}

CatchAdmin 还自动生成了一个模板文件,根据选择字段label值。模板文件存放在storage/static/importTemplates/xxxx导入模板.xlsx

WARNING

实际导入业务比较复杂,可以自行修改导入类