模型与校验器
2026/10/26大约 1 分钟
模型与校验器
模型基类 BaseModel
插件模型继承 app\basic\BaseModel(基于 ThinkORM),自带约定:
- 软删除:
use SoftDelete,删除时间字段delete_time(默认隐藏)。 - 时间戳:
create_time/update_time,autoWriteTimestamp = true。 - 只读字段:
created_by、create_time不可被后续写入覆盖。 - 审计自动填充:
onBeforeInsert写入created_by,onBeforeWrite写入updated_by(取当前登录主体)。 - 时间范围搜索:内置
searchCreateTimeAttr/searchUpdateTimeAttr,传数组即BETWEEN。
namespace plugin\am_demo\app\model;
use app\basic\BaseModel;
class Order extends BaseModel
{
// 表名约定 {name}_ 前缀:am_demo_order
protected $name = 'demo_order';
}表名前缀
插件自有表统一 {name}_ 前缀。可用 BasePlugin::table('order', $plugin) 生成,卸载时按前缀物理清理。
数据权限(opt-in)
模型可声明 dataScopeConfig(),BaseController::getList 会在非超管请求上自动施加行级过滤(本人/部门/自定义范围),无需在每个查询里手写。
校验器 BaseValidate
校验器继承 app\basic\BaseValidate(基于 topthink/think-validate),定义规则与场景,控制器用 $this->validate('scene', $data) 触发,校验失败抛 ApiException 并返回统一 400。
namespace plugin\am_demo\app\validate;
use app\basic\BaseValidate;
class OrderValidate extends BaseValidate
{
protected $rule = [
'title' => 'require|length:1,100',
'amount' => 'require|float|>=:0',
];
protected $scene = [
'save' => ['title', 'amount'],
'update' => ['amount'],
];
}服务层
业务逻辑放 app/service/,控制器只做参数编排与响应。服务是普通类,插件内自洽即可;需要被别的插件/基座复用或接管时,再走服务接管。
