表单验证是为了防止访问者跳过客户端验证(js验证)而造成的系统安全问题,一但非法用户绕过客户端验证而服务器端没有加以验证,这样就是很不安全了,所以项目必须要进行服务器端表单验证。
ThinkPHP5.1推荐使用验证器进行数据验证(也支持使用\think\Validate类进行独立验证)
内置规则:
https://www.kancloud.cn/manual/thinkphp5_1/354107
3.1、独立验证
https://www.kancloud.cn/manual/thinkphp5_1/354107
$validate = Validate::make([
'name' => 'require|max:25',
'email' => 'email'
],[
'name.require' => '名称必须填写',
'name.max' => '名称最多只能是25字',
'email.email' => '邮箱不合法'
]);$data = ['name' => 'thinkphp','email' => 'thinkphp@qq.com'
];if (!$validate->check($data)) {dump($validate->getError());
}
# 自定义验证规则
Validate::extend('checkName', function ($value, $rule) {return $rule == $value ? true : '名称错误';
});
3.2、验证器
thinkphp5.1之后推荐使用的方式,验证器,就是一个独立的文件,此文件就干一件事件,验证。
# 创建验证器php think make:validate 模块名/验证器名(首字母大写)# 验证器namespace app\index\validate;use think\Validate;class User extends Validate{protected $rule = ['name' => 'require|max:25','age' => 'number|between:1,120','email' => 'email', ];protected $message = ['name.require' => '名称必须','name.max' => '名称最多不能超过25个字符','age.number' => '年龄必须是数字','age.between' => '年龄只能在1-120之间','email' => '邮箱格式错误', ];}# 控制器$ret = $this->validate($request->post(),User::class);if (true !== $ret){dump($ret);}
控制器
3.3、csrf验证