之前在TP里面判定的时候一直用的if什么的逻辑语句直接判定,很少用验证器,因为觉得验证器写起来很麻烦。用起来也比较麻烦,直到今天被强迫用了一次验证器,才发现原来是以前自己太菜了,写不出来好的验证器,,验证器真好用,真香!
验证器的定义
先从简单的开始,创建validate目录,和控制器同级,然后use引入think\validate
一开始较为简单的两部分,就是我以前菜的只会写的那两部分
protected $rule = [
'eid' => 'require|checkEid',
'tid' => 'require|integer|checkTid',
'sno' => 'require|checkSno',
'sid' => 'require|checkSid',
'description' => 'require|length:10,500',
'deal' => 'require',
'username' => 'require|checkMid',
'status' => 'require|in:0,1',
'result' => 'require'
];
直接把我自己写的代码放上来了,rule就是规则,指自己的字段应该符合怎么样的要求没什么好说
protected $message = [
'username.require' => '请填写负责人用户名',
'username.checkMid' => '负责人用户名不存在',
'tid.require' => '请选择事件类型',
'tid.checkType' => '该事件类型不存在',
'description.require' => '请填写事件描述',
'description.length' => '描述字段长度在10到500个字符之间',
'deal.require' => '请填写处理方式',
'sno.require' => '请输入学号',
'sno.checkSno' => '请输入正确的学号',
'status.require' => '请填写事件状态',
'eid.require' => '未接收到相关事件数据',
'eid.checkEid' => '无该事件数据或该事件已处理完成',
'status.in' => '事件状态不合法',
'result.require' => '请输入最终的处理结果'
];
验证信息,当数组的键值不符合rule中的规则时所报的错,,以前觉得这东西很少用,,做了项目后发现,系统自带的提示实在是太简陋了,用户体验极其不好,所以能尽量自己写提示就自己写提示。
验证场景
然后,就是让我觉得验证器好用的地方了,验证场景一共有两种定义方法,同样的先将我自己的代码贴出来。
/**
* @验证场景
*/
protected $scene = [
'selectsno' => ['sno'],
'deal' => ['eid'],
'submit' => ['eid', 'result']
];
//add 验证场景定义
public function sceneAdd()
{
return $this->only(['tid', 'sid', 'description', 'deal', 'username', 'status'])
->remove('sid', 'checkSid');
}
在这里一共写了四个验证场景,前三个在数组$scene里面定义,通常用来定义一下简单的场景,左边是名字,自己随便定义就好,右边就是这个场景名字对应所需要验证的字段,比如第一行
‘selectsno’ => [‘sno’],
意思就是selectsno这个场景我们只需要验证sno这个字段就好了,其他的都不用管,很方便,而且不用重复写,只要将所有的规则写到一块,然后在调用的时候需要哪一块就将哪一块写进来,取个名字,在外面调用的时候用场景名字就可以了,非常方便
而第二种方法让我觉得验证更方便了
$this->only([‘tid’, ‘sid’, ‘description’, ‘deal’, ‘username’, ‘status’])
->remove(‘sid’, ‘checkSid’);
only里面写的是需要定义的字段,和第一种方法差不多然后这个remove就是可以指定字段让其中指定一个验证方法不生效,在写一些较大的项目里,这个方法简直不要太好用,可以说这两点让我知道了验证器是有多么的强大,好用。
最后,在验证器里也可以使用一些自己定义的验证方法,一般用来联合表查询进行写,这里就不再多做赘述,想要深入了解可以去看文档也是一个不错的方法。