thinkPHP5提供了场景验证功能,参考文档位于https://www.kancloud.cn/manual/thinkphp5/129322
比如在创建栏目中,我们不允许关键词为空,而在编辑栏目时允许关键词为空,在同一个验证器中,可以针对这些不同的场景进行不同的验证定义
首先打开之前写好的cate验证器application/admin/validata/Cate.php,添加指定处代码:
<?php
namespace app\admin\validate;
use think\Validate;
class Cate extends Validate
{
//验证规则
protected $rule = [
// catename验证,必须,长度不能超过25,名称不能重复
'catename' => 'require|max:25|unique:cate',
'keywords' => 'require',
];
//验证提示
protected $message = [
'catename.unique' => '栏目名称不能重复',
'catename.max' => '栏目名称不能大于5个字符',
'catename.require' => '栏目名称必须',
'keywords.require' => '栏目关键词必须',
];
//添加代码验证场景
protected $scene = [
'edit' => ['catename'],
];
}
在$scene规则中定义好需要验证的字段为catename,只在edit条件下验证。
在cate的控制器文件aplication/admin/controller/Cate.php的edit操作方法中添加指定处代码:
public function edit()
{
//获取修改的信息
$id=input('id');
$cates = db('cate')->where('ID',$id)->find();
$this->assign('cates',$cates);//模板赋值
//修改后提交
if(request()->isPost()){
$data=[
'ID'=>input('id'),
'catename'=>input('catename'),
'keywords'=>input('keywords'),
'desc'=>input('desc'),
'type'=>input('type') ? input('type') : 0,
];
//验证
$validate = \think\Loader::validate('Cate');
//添加代码->scene('edit')
if($validate->scene('edit')->check($data)){
$res = \think\Db::name('cate')->update($data);
if($res){
return $this->success('修改栏目成功','lists');
}else{
return $this->error('修改栏目失败');
}
}else{
//验证失败输出提示信息
return $this->error($validate->getError());
}
}
return $this->fetch();
}
在验证data之前,进行场景过滤,只验证验证器中定义的场景。
这样,自定义场景验证完成。