THINKPHP有两种验证,一种叫验证器一种叫独立验证
先记一下验证器\类
在application下创建一个validate文件夹,在validate文件夹中放我们自定义的验证器,创建一个User验证器
1、不使用静态代理的验证器
文件application\validate\User.php,自定义的验证器类
<?php
/**
* Created by PhpStorm.
* User: 10475
* Date: 2018/9/2
* Time: 21:44
*/
// 用户信息表的字段验证器\类
namespace app\validate;
use think\Validate;
// 用户自定义的验证器需要继承框架的验证器才能使用
class user extends Validate
{
// 当前验证规则使用了Validate类中的rule方法
protected $rule = [
'name|姓名' => [
'require' => 'require',
'min' => 5,
'max' => 20,
],
'email|邮箱' => [
'require' => 'require',
'email' => 'email',
],
'password|密码' => [
'require' => 'require', //必须的
'min' => 3, //最小3位
'max' => 12, //最大12位
'alphaNum' => 'alphaNum',//仅允许字母加数字alphaNum
],
'mobile|手机' => [
'require' => 'require',
'mobile' => 'mobile',
],
];
}
文件application\demo\controller\Demo9.php,使用了验证器的控制器
<?php
/**
* Created by PhpStorm.
* User: 10475
* Date: 2018/9/2
* Time: 21:38
*/
namespace app\demo\controller;
use app\validate\User;//引入用户自定义的验证器
use think\Controller;
class Demo9 extends Controller
{
public function test1()
{
// 模拟要验证的数据
$data = [
'name'=>'Peter',
'email'=>'peter@php.cn',
'password'=>'123abc',
'mobile'=>'18966775522'
];
$validate = new User();
if (!$validate->check($data)){
return $validate->getError();
}
return '验证通过';
}
}
2、使用静态代理的验证器:
验证器还是不变,用的文章上面的验证器
需要加一个静态代理类:application\facade\User.php,用来代理User验证器
<?php
/**
* Created by PhpStorm.
* User: 10475
* Date: 2018/9/2
* Time: 22:04
*/
namespace app\facade;
// 继承框架的Facade类,我们自定义的静态代理才能使用Facade类中的方法
class User extends \think\Facade
{
public static function getFacadeClass()
{
// 返回代理的类
return 'app\validate\User';
}
}
控制器:application\demo\controller\Demo91.php
<?php
/**
* Created by PhpStorm.
* User: 10475
* Date: 2018/9/2
* Time: 21:38
*/
namespace app\demo\controller;
// 引入静态代理的验证器类
use app\facade\User;
use think\Controller;
class Demo91 extends Controller
{
public function test1()
{
// 模拟要验证的数据
$data = [
'name'=>'Peter',
'email'=>'peterphp.cn',
'password'=>'123abc',
'mobile'=>'18966775522'
];
if (!User::check($data)){
return User::getError();
}
return '验证通过';
}
}
3、仅通过Controller类中的validate方法进行验证
验证器还是不变,变的只是如何在控制器中进行验证
控制器:
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function test2()
{
// 模拟要验证的数据
$data = [
'username'=>'Chenjiankang',
'password'=>'abc123',
'email'=>'1047588430@qq.com',
'mobile'=>'13355555555'
];
// validate方法最少接受两个参数,一个是要验证的数据,一个是用来验证的规则
$res = $this->validate($data,'app\validate\User');
if(true!==$res){
// 错误信息可以直接返回validate方法就行了
return $res;
}
return '验证通过,这是test2的方法';
}
}
还有一篇很好的文章,记一下等用得着再看https://blog.youkuaiyun.com/dancheng1/article/details/78886931