TP5.1+ 中的验证器,个人觉得就是 Laravel/Lumen 或是 CodeIgniter 中的表单验证.
我们可以用以下指令快速生成验证器
php think make:validate dev/Test
以下是我生成的 User 验证器示例
- <
* / \
* // \\
* //| . |\\
* "'\ /'"_.-~^`'-.
* \ _ /--' `
* ___)( )(___
* (((__) (__))) 高山仰止,景行行止.虽不能至,心向往之.
*
*/
namespace app\dev\validate;
use think\Db;
use think\Validate;
class User extends Validate {
protected $rule = [
'name' => 'require|max:25|checkName:用户名不能为123',
'nickname' => 'require'
];
protected $message = [
'name.require' => '名称不能为空',
'name.max' => '名称最少为25个字符',
'nickname.require' => 'nickname不能为空'
];
// 自定义验证规则
protected function checkName($value,$rule,$data=[],$name,$description){
if ($value == '123'){
return $rule;
}else{
return true;
}
}
}
以上的自定义验证规则中的 $value 是 name 的值,$rule 的值为 '用户名不能为123',具体可以参看文档 https://www.kancloud.cn/manual/thinkphp5_1/354102
使用示例:
在控制器有一个如下方法,
public function curlAddUser(Request $request){
$data = [
'name' => $request->post('name'),
'nickname' => $request->post('nickname')
];
$validate = new \app\dev\validate\User();
if (!$validate->check($data)){
return ($validate->getError());
}
}
利用 postman 请求结果如下
如果需要批量验证,可以加上 batch() 方法,改成如下示例
public function curlAddUser(Request $request){
$data = [
'name' => $request->post('name'),
'nickname' => $request->post('nickname')
];
$validate = new \app\dev\validate\User();
if (!$validate->batch()->check($data)){
dump($validate->getError());
}
}
我们在控制器中新加 curlAddUser2() 方法探索独立验证.可以使用 extend 方法动态注册验证规则
public function curlAddUser2(Request $request){
$rule = [
'name' => 'require|max:25|checkName:你不是公孙胜',
'nickname' => 'require'
];
$msg = [
'name.require' => '名称不能为空',
'name.max' => '名称最多不能超过25个字符',
'nickname' => 'nickname 不能为空'
];
Validate::extend('checkName',function ($value,$rule){
if ($value != '公孙胜'){
return $rule;
}else{
return true;
}
});
$data = [
'name' => 'xx公孙胜',
'nickname' => ''
];
$validate = Validate::make($rule,$msg);
$result = $validate->batch()->check($data);
if (!$result){
dump($validate->getError());
}
}
示例结果