Skip to content

Backend 基类控制器

介绍

Backend 类是一个通用的后台控制器基类,统一了数据表 CRUD 操作行为,降低重复代码,内置了数据权限控制,用“配置 + 约定”驱动查询、权限、联表、搜索等功能。通过继承此类,可以快速构建后台管理功能。

属性说明

基础属性

属性名类型默认值说明
$noNeedLoginarray[]无需登录即可访问的方法名数组
$noNeedRightarray[]需要登录但无需权限验证的方法名数组
$modelModelnull指定的主模型类实例
$authobjectnull当前登录用户信息
$dataLimitbool/stringfalse数据权限控制,支持 false、'auth'、'personal'
$dataLimitFieldstring'admin_id'数据权限关联字段
$createdByFieldstring''创建者自动填充字段
$updatedByFieldstring''更新者自动填充字段
$multiFieldsstring/array'status'允许批量操作的字段,数组或以逗号分隔的字符串
$aliasstring''表别名
$excludeSearchFieldsarray[]排除搜索字段
$excludeSearchValuesarray[]排除搜索值
$modelValidatebooltrue是否启用模型验证
$witharray[]关联预加载模型
$selectpageFieldsstring'*'Selectpage 查询字段
$selectpageKeystring'id'Selectpage 主键字段
$selectFieldsstring'*'列表查询字段
$searchablearray[]搜索白名单配置
$excludeFieldsarray/string[]添加/编辑时排除的字段

新增 / 编辑时自动写入当前管理员 ID

示例:

PHP
protected $createdByField = 'created_by';
protected $updatedByField = 'updated_by';

搜索 $searchable 配置

示例:

PHP
protected array $searchable = [
    'type_id' => [
        'type' => 'string',      // 字段类型:string/int/timestamp
        'join' => [
            'table' => 'system_attachment_type',
            'alias' => 't',
            'fields' => ['t.name as type_name'],
            'on' => [
                ['a.type_id', '=', 't.id']
            ],
        ]
    ],
    'status' => [
        'type' => 'int',
        'operator' => '='  // 支持 =, !=, >, <, >=, <=, LIKE, IN, NOT IN, BETWEEN, NULL, NOT NULL
    ],
    'createtime' => [
        'type' => 'timestamp'  // 时间戳类型,支持范围查询
    ]
];

分页参数统一约定

JSON
{
  "page": 1,
  "limit": 10,
  "order": "desc",
  "orderBy": "id"
}

完整示例

PHP

<?php

namespace plugin\condoradmin\app\controller;

use plugin\condoradmin\app\library\Backend;
use plugin\condoradmin\app\model\SystemTest;

class SystemTestController extends Backend
{

    protected array $searchable = [
        'name' => ['type' => 'string'],
        'title' => ['type' => 'string'],
        'price' => ['type' => 'int'],
        'views' => ['type' => 'int'],
        'activitytime' => ['type' => 'int'],
        'refreshtime' => ['type' => 'int'],
        'createtime' => ['type' => 'int'],
    ];

    public function __construct()
    {
        parent::__construct();
        $this->model = new SystemTest();
    }
}

方法说明

响应方法

json($code, $msg = 'ok', $data = [])

返回 JSON 格式响应。

参数:

  • $code: 状态码(字符串或整数)
  • $msg: 消息文本
  • $data: 响应数据

示例:

php
return $this->json('0000', '操作成功', ['id' => 1]);

成功响应

success($msg = 'Success', $data = [])

返回成功响应。

示例:

php
return $this->success('保存成功', ['id' => 1]);

失败响应

fail($msg = 'Fail', $data = [])

返回失败响应。

示例:

php
return $this->fail('参数错误');

列表响应

index(Request $request)

获取数据列表,支持分页、排序、搜索。

请求参数:

  • page: 页码(默认 1)

  • limit: 每页数量(默认 10,最大 500)

  • orderBy: 排序字段(默认主键)

  • order: 排序方式(asc/desc,默认 desc)

  • 其他:搜索条件参数

Selectpage 方法

selectpage(Request $request)

Selectpage 专用方法,支持下拉选择数据。

特性:

支持已选数据置顶显示 支持 UNION ALL 查询 可配置查询字段和主键

请求参数:

id: 已选的 ID 值(多个用逗号分隔) 其他参数同 index 方法

添加方法

add(Request $request)

添加数据。

请求参数:

POST 数据:要添加的字段键值对

验证:

如果 $modelValidate 为 true 且模型有 rules() 方法,使用 Respect\Validation 验证

自动填充创建者字段(如果配置)

自动填充数据权限字段(如果启用)

编辑方法

edit(Request $request) 编辑数据。

请求参数:

id: 要编辑的数据 ID

POST 数据:要更新的字段键值对

权限验证:

检查数据权限(如果启用)

自动填充更新者字段(如果配置)

删除方法

del(Request $request) 删除数据,支持单个或批量删除,如果启用软删除则软删除。

请求参数:

ids 或 id: 要删除的 ID(单个或多个用逗号分隔)

权限验证:

检查数据权限(如果启用)

真实删除

destroy(Request $request) 真实删除数据。

请求参数:

ids 或 id: 要删除的 ID

注意:

需要模型支持软删除(SoftDeletes)

恢复软删除

restore(Request $request) 恢复软删除的数据。

请求参数:

ids 或 id: 要恢复的 ID

批量更新

multi(Request $request) 批量更新数据。

请求参数:

ids 或 id: 要更新的 ID

field 和 value: 单个字段更新

values: 多个字段更新(JSON 对象)

字段限制:

只能更新 $multiFields 中定义的字段

超级管理员可更新所有字段

示例:

php
// 单个字段更新
POST /user/multi
{
    "ids": [1,2,3],
    "field": "status",
    "value": 2
}

// 多个字段更新
POST /user/multi
{
    "ids": [1,2,3],
    "values": {
        "status": 1,
        "type": 2
    }
}

辅助方法

getDataLimitAdminIds() 获取数据权限限制的管理员 ID 列表。

返回:

空数组:不限制或超级管理员

数组:限制的管理员 ID 列表

preExcludeFields(array $data)
排除不需要的字段。

buildparams(Request $request)
构建查询参数,返回 [$params, $sort, $order, $offset, $limit]。

applyWhere($query, $params)
应用查询条件到查询构造器。

注意事项

数据权限:

$dataLimit = false:禁用数据权限
$dataLimit = 'personal':仅限自己的数据
$dataLimit = 'auth':自己和下属的数据

搜索操作符:
支持 =, !=, >, <, >=, <=, LIKE, IN, NOT IN, BETWEEN, NULL, NOT NULL
时间戳字段支持范围查询
如 ['2023-01-01', '2023-12-31'] 或时间戳范围数组 [1672531200, 1704064000]

安全特性:

字段名白名单验证
SQL 操作符验证
自动参数过滤

性能优化:

分页限制最大 500 条
JOIN 查询避免重复
字段选择优化

事务处理:

添加、编辑、删除操作自动使用事务
异常时自动回滚