前言: 本案例主要以 创建编辑Cate类型 为例,让大家更容易理解自定义验证规则全程实现方式。
创建自定义验证类
路径 :extend/catcher/validates
新建验证类
<?php
namespace catcher\validates;
use catchAdmin\system\model\Cate;
class checkCate implements ValidateInterface
{
//验证的方法名
public function type(): string
{
// TODO: Implement type() method. 返回验证类名:checkCate
return 'checkCate';
}
//数据验证操作
public function verify($value): bool
{
// TODO: Implement verify() method.
//方式一:自定义的findParamsBy()方法(这里根据我的业务需求新增的)
$model=new Cate();
$param['is_id']=1;//验证数据是否存在参数
$param['id']=$value;
$param['group_code']='equipment_main_cate';
$model->findParamsBy($param);
//返回结果:true或者false ,否则无法验证
return empty($model->findParamsBy($param)) ? false : true;
//方式二:自定义的findBy($id)方法(catchadmin官网)
$model=new Cate();
//返回结果:true或者false ,否则无法验证
return empty($model->findBy($value)) ? false : true;
}
//错误消息返回
public function message(): string
{
// TODO: Implement message() method.
return '所属设备大类不存在';
}
}
配置验证规则
路径:config/catch.php
/**
* 自定义验证规则
*
*/
'validates' => [
\catcher\validates\Sometimes::class,
\catcher\validates\SensitiveWord::class,
\catcher\validates\CheckCate::class //新增的验证规则
],
创建自定义Request
路径:控制器同级
创建request文件
创建控制器同名目录并且创建Requst文件
代码示例
<?php
namespace catchAdmin\equipment\request\equipmentCate;
use catchAdmin\equipment\model\EquipmentCate;
use catcher\base\CatchRequest;
class EquipmentCateRequest extends CatchRequest
{
protected function rules(): array
// TODO: Implement rules() method.
{
//验证数据的唯一性:当ID不为空则验证编辑(id<>$id),为空则验证新增的
$id = !empty(request()->route()['id'])?','.request()->route()['id']:'';
return [
'name|类型名称' => 'require|length:2,20',
'hosted|是否主机' => 'require',
'equipment_main_cate_id|所属设备大类' => 'require|checkCate|unique:'.EquipmentCate::class.',name^equipment_main_cate_id'.$id,
'remark|备注' => 'length:1,255'
];
}
//自定义验证信息
protected function message(): array
{
// TODO: Implement message() method.
return [
'equipment_main_cate_id.checkCate' => '所属设备大类不存在,请重新选择',
'equipment_main_cate_id.unique' => '设备类型已经存在,请重新输入',
];
}
}
使用自定义Request
控制器中引用自定义Request
代码示例
#use catcher\base\CatchRequest as Request; //非自定义使用
//自定义Requst请求,可在数据操作前进行数据验证(同validate验证)
use catchAdmin\equipment\request\equipmentCate\EquipmentCateRequest as Request;
use catcher\CatchResponse;
use catcher\base\CatchController;
use catchAdmin\equipment\model\EquipmentCate as EquipmentCateModel;