8-1ThinkPHP5验证器的使用

8-1ThinkPHP5验证器的使用

箍孟八乓狭厦课俊携脑兰补停

验证器类文件位于D:\phpStudy\PHPTutorial\WWW\tp5\thinkphp\library\think\Validate.php

其中最重要的属性和方法为:

创建验证器

验证器可以创建在应用(application)目录下,也可以创建在模块(如index)下

在application目录下创建:

<?php
//用户信息表的字段验证类
namespace app\validate;
use think\Validate;
class User extends Validate//必须继承
{
    // 当前验证的规则(复制Validate的rule属性,然后重写)
    protected $rule = [
        'name'=>'require|length:4,15',
        'sex'=>'in:0,1',
        'age'=>'require|between:18,60',
        'salary'=>'require|gt:1500'
    ];
}

创建Demo控制器:

<?php
namespace app\index\controller;
use think\Controller;
use app\validate\User;//引入自定义的验证器
class Demo extends Controller
{
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'men'
        ];

        //验证器是一个类
        $validate=new User;
        //直接调用check()进行验证
        if(!$validate->check($data))//如果验证失败,取反,让if条件成立,输出错误信息
        {
            return $validate->getError();
        }
        return "验证通过";
    }
}

执行:


修改Demo控制器代码:

<?php
namespace app\index\controller;
use think\Controller;
use app\validate\User;//引入自定义的验证器
class Demo extends Controller
{
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'age'=>2
        ];

        //验证器是一个类
        $validate=new User;
        //直接调用check()进行验证
        if(!$validate->check($data))//如果验证失败,取反,让if条件成立,输出错误信息
        {
            return $validate->getError();
        }
        return "验证通过";
    }
}

执行:


修改控制器代码:

<?php
namespace app\index\controller;
use think\Controller;
use app\validate\User;//引入自定义的验证器
class Demo extends Controller
{
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'sex'=>5,
            'age'=>28
        ];

        //验证器是一个类
        $validate=new User;
        //直接调用check()进行验证
        if(!$validate->check($data))//如果验证失败,取反,让if条件成立,输出错误信息
        {
            return $validate->getError();
        }
        return "验证通过";
    }
}

执行:


修改控制器代码:

<?php
namespace app\index\controller;
use think\Controller;
use app\validate\User;//引入自定义的验证器
class Demo extends Controller
{
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'sex'=>1,
            'age'=>28,
            'salary'=>500
        ];

        //验证器是一个类
        $validate=new User;
        //直接调用check()进行验证
        if(!$validate->check($data))//如果验证失败,取反,让if条件成立,输出错误信息
        {
            return $validate->getError();
        }
        return "验证通过";
    }
}

执行:


修改控制器代码:

<?php
namespace app\index\controller;
use think\Controller;
use app\validate\User;//引入自定义的验证器
class Demo extends Controller
{
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'sex'=>1,
            'age'=>28,
            'salary'=>3000
        ];

        //验证器是一个类
        $validate=new User;
        //直接调用check()进行验证
        if(!$validate->check($data))//如果验证失败,取反,让if条件成立,输出错误信息
        {
            return $validate->getError();
        }
        return "验证通过";
    }
}

执行:


以上,所有定义的条件都得到验证,但是错误提示信息是中英文混合。

修改验证器:

<?php
//用户信息表的字段验证类
namespace app\validate;
use think\Validate;
class User extends Validate//必须继承
{
    // 当前验证的规则(复制Validate的rule属性,然后重写)
    protected $rule = [
        'name'=>'require|length:4,15',
        'sex'=>'in:0,1',
        'age'=>'require|between:18,60',
        'salary'=>'require|gt:1500'
    ];

    //错误信息
    protected $message=[
        'name.require'=>'员工姓名不能为空',
        'name.length'=>'姓名长度必须在 4-15',
        'sex.in'=>'性别必须是男或者女',
        'age.require'=>'年龄不能为空',
        'age.between'=>'年龄必须在 18-60',
        'salary.require'=>'工资必须输入',
        'salary.gt'=>'工资必须大于 1500'
    ];
}

修改控制器Demo

<?php
namespace app\index\controller;
use think\Controller;
use app\validate\User;//引入自定义的验证器
class Demo extends Controller
{
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人',
            'sex'=>1,
            'age'=>28,
            'salary'=>3000
        ];

        //验证器是一个类
        $validate=new User;
        //直接调用check()进行验证
        if(!$validate->check($data))//如果验证失败,取反,让if条件成立,输出错误信息
        {
            return $validate->getError();
        }
        return "验证通过";
    }
}

执行:


修改控制器Demo

<?php
namespace app\index\controller;
use think\Controller;
use app\validate\User;//引入自定义的验证器
class Demo extends Controller
{
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'sex'=>9,
            'age'=>28,
            'salary'=>3000
        ];

        //验证器是一个类
        $validate=new User;
        //直接调用check()进行验证
        if(!$validate->check($data))//如果验证失败,取反,让if条件成立,输出错误信息
        {
            return $validate->getError();
        }
        return "验证通过";
    }
}

执行:


修改控制器Demo

<?php
namespace app\index\controller;
use think\Controller;
use app\validate\User;//引入自定义的验证器
class Demo extends Controller
{
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'sex'=>1,
            'age'=>2,
            'salary'=>3000
        ];

        //验证器是一个类
        $validate=new User;
        //直接调用check()进行验证
        if(!$validate->check($data))//如果验证失败,取反,让if条件成立,输出错误信息
        {
            return $validate->getError();
        }
        return "验证通过";
    }
}

执行:


修改控制器:

<?php
namespace app\index\controller;
use think\Controller;
use app\validate\User;//引入自定义的验证器
class Demo extends Controller
{
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'sex'=>1,
            'age'=>28,
            'salary'=>500
        ];

        //验证器是一个类
        $validate=new User;
        //直接调用check()进行验证
        if(!$validate->check($data))//如果验证失败,取反,让if条件成立,输出错误信息
        {
            return $validate->getError();
        }
        return "验证通过";
    }
}

执行:


修改控制器

<?php
namespace app\index\controller;
use think\Controller;
use app\validate\User;//引入自定义的验证器
class Demo extends Controller
{
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'sex'=>1,
            'age'=>28,
            'salary'=>2800
        ];

        //验证器是一个类
        $validate=new User;
        //直接调用check()进行验证
        if(!$validate->check($data))//如果验证失败,取反,让if条件成立,输出错误信息
        {
            return $validate->getError();
        }
        return "验证通过";
    }
}

执行:


简化

修改控制器

验证器的简化,直接使用系统的控制器 Controller 下的 validate()方法来验证
$this->validate($data,$rule,$mess)

<?php
namespace app\index\controller;
use think\Controller;
class Demo extends Controller
{
    // 验证器的简化,直接使用系统的控制器 Controller 下的 validate()方法来验证
    //$this->validate($data,$rule,$mess)
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'sex'=>1,
            'age'=>28,
            'salary'=>2800
        ];
        $rule='app\validate\User';//验证规则,注意:必须是单引号

        $res=$this->validate($data,$rule);
        if($res!==true)//注意不等于的写法是!==
        {
            return $res;
        }
        return "验证通过";
    }
}

执行:


修改数据:

<?php
namespace app\index\controller;
use think\Controller;
class Demo extends Controller
{
    // 验证器的简化,直接使用系统的控制器 Controller 下的 validate()方法来验证
    //$this->validate($data,$rule,$mess)
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人',
            'sex'=>1,
            'age'=>28,
            'salary'=>3000
        ];
        $rule='app\validate\User';//验证规则,注意:必须是单引号

        $res=$this->validate($data,$rule);
        if($res!==true)//注意不等于的写法是!==
        {
            return $res;
        }
        return "验证通过";
    }
}

执行:


修改数据:

<?php
namespace app\index\controller;
use think\Controller;
class Demo extends Controller
{
    // 验证器的简化,直接使用系统的控制器 Controller 下的 validate()方法来验证
    //$this->validate($data,$rule,$mess)
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'sex'=>11,
            'age'=>28,
            'salary'=>3000
        ];
        $rule='app\validate\User';//验证规则,注意:必须是单引号

        $res=$this->validate($data,$rule);
        if($res!==true)//注意不等于的写法是!==
        {
            return $res;
        }
        return "验证通过";
    }
}

执行:


修改数据

<?php
namespace app\index\controller;
use think\Controller;
class Demo extends Controller
{
    // 验证器的简化,直接使用系统的控制器 Controller 下的 validate()方法来验证
    //$this->validate($data,$rule,$mess)
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'sex'=>1,
            'age'=>8,
            'salary'=>3000
        ];
        $rule='app\validate\User';//验证规则,注意:必须是单引号

        $res=$this->validate($data,$rule);
        if($res!==true)//注意不等于的写法是!==
        {
            return $res;
        }
        return "验证通过";
    }
}

执行


修改数据

<?php
namespace app\index\controller;
use think\Controller;
class Demo extends Controller
{
    // 验证器的简化,直接使用系统的控制器 Controller 下的 validate()方法来验证
    //$this->validate($data,$rule,$mess)
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'sex'=>1,
            'age'=>28,
            'salary'=>300
        ];
        $rule='app\validate\User';//验证规则,注意:必须是单引号

        $res=$this->validate($data,$rule);
        if($res!==true)//注意不等于的写法是!==
        {
            return $res;
        }
        return "验证通过";
    }
}

执行:


修改数据:

<?php
namespace app\index\controller;
use think\Controller;
class Demo extends Controller
{
    // 验证器的简化,直接使用系统的控制器 Controller 下的 validate()方法来验证
    //$this->validate($data,$rule,$mess)
    //1.验证类:使用的主要是Validate下的rule属性
    public function test1()
    {
        //要验证的数据
        $data=[
            'name'=>'萌面人资料铺',
            'sex'=>1,
            'age'=>28,
            'salary'=>3300
        ];
        $rule='app\validate\User';//验证规则,注意:必须是单引号

        $res=$this->validate($data,$rule);
        if($res!==true)//注意不等于的写法是!==
        {
            return $res;
        }
        return "验证通过";
    }
}

执行:


如果数据很简单,则可以不用验证器,直接在当前的控制器中写:

<?php
namespace app\index\controller;
use think\Controller;
class Demo extends Controller
{
    public function test1()
    {
        $data=['age'=>20];
        $rule=['age'=>'between:10,50'];
        $mess=['age.between'=>'年龄必须在 10-50'];
        $res=$this->validate($data,$rule,$mess);
        if($res!==true)
        {
            return $res;
        }
        return '验证通过!';
    }
}

执行:


修改数据

<?php
namespace app\index\controller;
use think\Controller;
class Demo extends Controller
{
    public function test1()
    {
        $data=['age'=>2];
        $rule=['age'=>'between:10,50'];
        $mess=['age.between'=>'年龄必须在 10-50'];
        $res=$this->validate($data,$rule,$mess);
        if($res!==true)
        {
            return $res;
        }
        return '验证通过!';
    }
}

执行:


拱霖滥苯究响融仁丧丰池凰肚