1、ThinkPHP5.1推荐使用验证器进行数据验证(也支持使用\think\Validate类进行独立验证) 2、验证器使用的是Validate类中的rule属性 3、验证器是一个类,定义验证器时要继承Validate类 4、验证器可以创建在应用application目录下的任何一个可以访问的目录下,这个访问不是指外部的url访问,只需要指定正确的命名空间 5、验证器其实是完成框架的think\Validate类中的属性protected $rule=[] 的初始化 6、在控制器中可以直接实例化调用check()完成验证,还可以创建一个自定义的静态代理,来统一验证方法的调用方式
定义验证器
<?php //用户信息表的字段验证器 namespace app\validate; use think\Validate; class User extends Validate { //推荐格式,验证规则,可参照Validate.php protected $rule = [ 'name' => [ 'require' => 'require', 'min' => 5, 'max' => 20 ], 'email' => [ 'require' => 'require', 'email' => 'email' ], 'password' => [ 'require' => 'require', 'min' => 5, 'max' => 12, 'alphaNum' => 'alphaDash' //密码必须是字母或数字 ], 'mobile' => [ 'require' => 'require', 'mobile' => 'mobile' ] ]; //错误提示信息,若不定义使用默认信息 protected $message = [ 'name' => [ 'require' => '用户名不能为空', 'min' => '用户名过短', 'max' => '用户名过长' ], 'email' => [ 'require' => '邮箱不能为空', 'email' => '不符合邮箱格式' ], 'password' => [ 'require' => '密码不能为空', 'min' => '最短5位', 'max' => '最长12位', 'alphaNum' => '密码必须是字母或数字' ], 'mobile' => [ 'require' => '手机号不能为空', 'mobile' => '不符合手机格式' ] ]; }数据验证
<?php namespace app\index\controller; use think\Controller; use app\Validate\User; //用户自定义的验证器 class Demo9 extends Controller { //1、验证器使用的是Validate类中的rule属性 public function test1() { //要验证的数据 $data = [ 'name' => 'zmz', 'email' => 'zmz@qq.com', 'password' => 'zmz123456', 'mobile' => '15065845666' ]; //2、数据验证 $validate = new User; if (!$validate->check($data)) { //验证失败,输出提示信息 return $validate->getError(); } return '验证通过'; } }批量验证
默认情况下,一旦有某个数据的验证规则不符合,就会停止后续数据及规则的验证,如果希望批量进行验证,可以设置:
class Index extends Controller { // 是否批量验证 protected $batchValidate = true; public function index() { $result = $this->validate( [ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com', ], 'app\index\validate\User'); if (true !== $result) { // 验证失败 输出错误信息 dump($result); } } }在非控制器的地方如果需要执行批量验证,可以在验证的时候添加是否批量的方法batch()
namespace app\common\service; use app\common\validate\User as UserValidate; class Test { public function validateTest($data) { $validata = new UserValidate; $result = $validate->batch()->check($data); if ($result !== true) { dump($result); } } }静态代理
实现验证器的静态代理
<?php namespace app\faced; use think\Facade; class User extends Facade { protected static function getFacadeClass() { return 'app\validate\User'; } }验证数据
<?php namespace app\index\controller; use think\Controller; use app\faced\User; class Demo9 extends Controller { //1、验证器使用的是Validate类中的rule属性 public function test1() { //要验证的数据 $data = [ 'name' => 'zmz123', 'email' => 'zmz@qq.com', 'password' => 'zmz123456', 'mobile' => '15065845666' ]; //使用当前验证器的静态代理 if (!User::check($data)) { //验证失败,输出提示信息 return User::getError(); } return '验证通过'; } }独立验证的含义:
任何时候,都可以直接使用think\Validate类而不需要定义验证器类进行独立的验证操作
独立验证文档
推荐格式:
<?php namespace app\index\controller; use think\Controller; use think\facade\Validate; class Demo9 extends Controller { public function test() { //验证规则 $rule = [ 'name' => [ 'require' => 'require', 'min' => 5, 'max' => 20 ], 'email' => [ 'require' => 'require', 'email' => 'email' ] ]; //提示信息 $msg = [ 'name' => [ 'require' => '用户名不能为空', 'min' => '用户名过短', 'max' => '用户名过长' ], 'email' => [ 'require' => '邮箱不能为空', 'email' => '不符合邮箱格式' ] ]; //数据 $data = [ 'name' => 'thinkphp', 'email' => 'thinkphp@qq.com', ]; //数据验证 $validate = Validate::make($rule, $msg); $result = $validate->check($data); if (!$result) { return $validate->getError(); } return '验证通过'; } }注: 与之前说的验证器验证其实本质一样,只是不需要定义验证器,把所有代码放在了一块