随心的博客

好记性不如个烂笔头,随心记录!

返回顶部

TP6中验证器的使用

TP6中验证器的使用

 

一、定义验证器

方式1:在目录app目录下,生成 validate目录,然后创建相应的验证器。
方式2:通过命令行工具执行命令: php think make:validate User
 
刚生成的验证器,代码如下:
<?php
declare (strict_types = 1);

namespace app\validate;
use think\Validate;

class User extends Validate
{
    /**
     * 定义验证规则
     * 格式:'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     */
    protected $rule = [
    ];
    /**
     * 定义错误信息
     * 格式:'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */
    protected $message = [
    ];
}

 

二、简单验证示例:

HTML代码:

<form action="/index.php/test_validate/Validate1Act" method="post">

  <p>账户名: <input type="text" name="user_name" /> </p>
  <p>手机号: <input type="text" name="user_mobile" /> </p>
  <p>&nbsp;&nbsp;&nbsp;&nbsp;名: <input type="text" name="user_truename" /> </p>
  <p>身份证: <input type="text" name="user_idcard" /> </p>

  <p><input type="submit" value="提交"></p>
</form>
验证器代码:app/validate/User.php
<?php
declare (strict_types = 1);
namespace app\validate;
use think\Validate;

class User extends Validate
{
    /**
     * 定义验证规则
     * 格式:'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     */
    protected $rule = [
        'user_name'     => 'require|length:6,20',
        'user_mobile'   => 'mobile',
        'user_truename' => 'chs',
        'user_idcard'   => 'idCard'
    ];
    /**
     * 定义错误信息
     * 格式:'字段名.规则名' =>  '错误信息'
     *
     * @var array
     */
    protected $message = [
        'user_name.require'     => '账号不能为空',
        'user_name.length'      => '账号长度需在6-20个字符之间',
        'user_mobile'           => '手机号格式不正确',
        'user_truename'         => '姓名必须为中文',
        'user_idcard'           => '身份证号格式不正确'
    ];
}

 

控制器代码:

 

/**
     * 显示表单模板
     */
    public function validate1()
    {
        return view("test/validate1");
    }

    /**
     * 验证
     */
    public function Validate1Act()
    {
        $data = request()->param();


        try {
            $res = validate(User::class)->check($data);

            return  "验证通过了";
        } catch (ValidateException $e) {
            
            return "验证失败:".$e->getError();
        }
    }

 

三、批量验证

批量验证就是,一次把所有的错误以数组的形式返回到控制器。
 
批量验证,是需要增加 batch(true)的规则
 
代码如下:
/**
     * 验证
     */
    public function Validate1Act()
    {
        $data = request()->param();
        
        try {
            $res = validate(User::class)->batch(true)->check($data);

            return  "验证通过了";
        } catch (ValidateException $e) {
            
            $msgs = $e->getError();
            $msgs_str = implode(",",$msgs);

            return "验证失败:".$msgs_str;
        }
    }

 

四:自定义验证
 
注意:
1、自定义规则不能和内置规则重复
2、自定义规则中参数

 

protected $rule = [
        'user_name'     => 'require|length:6,20|checkName',
    ];
protected $message = [
        'user_name.require'     => '账号不能为空',
        'user_name.length'      => '账号长度需在6-20个字符之间',
    ];
 
/**
 * 自定义验证规则
 * $value 表示输入的值
 * $rule  验证的规则 
 * $data 输入的全部数据
 */
protected function checkName($value, $rule, $data=[])
{
    if ($value == 'yangphp') 
    {
       return true;
    }
    else
    {
        return "账户名错误";
    }
}

 

五、验证场景

 验证器:

//表示当edit场景,只验证 user_name 和 user_mobile
protected $scene = [
        'edit'  =>  ['user_name','user_mobile'],
    ];  
控制器:

/**
 * 验证2
 */
public function Validate2Act()
{
    $data = request()->param();

    try {
        $res = validate(User::class)->scene('edit')->check($data);

        return  "验证通过了";
    } catch (ValidateException $e) {
        
        $msg = $e->getError();

        return json($msg);
    }
}
当设定 edit场景只验证 user_name ,user_mobile 的格式。 user_truename,user_idcard 则不验证

六、验证规则

1、require   验证某个字段必须
2、number  验证某个字段的值是否是纯数字
3、integer 验证某个字段的值是否为整数
4、float     验证某个字段的值是否为浮点数字
5、boolean  验证某个字段的值是否为布尔值
6、email     验证某个字段的值是否为email地址
7、array    验证某个字段的值是否为数组
8、accepted    验证某个字段是否为为 yes, on, 或是 1
9、date        验证值是否为有效的日期
10、alpha    验证某个字段的值是否为纯字母
11、alphaNum 验证某个字段的值是否为字母和数字
12、alphaDash    验证某个字段的值是否为字母和数字,下划线_及破折号-
13、chs        验证某个字段的值只能是汉字
14、chsAlpha 验证某个字段的值只能是汉字、字母
15、chsAlphaNum  验证某个字段的值只能是汉字、字母和数字
16、chsDash     验证某个字段的值只能是汉字、字母、数字和下划线_及破折号
17、cntrl    验证某个字段的值只能是控制字符(换行、缩进、空格)
18、graph    验证某个字段的值只能是可打印字符(空格除外)
19、print    验证某个字段的值只能是可打印字符(包括空格)
20、lower    验证某个字段的值只能是小写字符
21、upper    验证某个字段的值只能是大写字符
22、space    验证某个字段的值只能是空白字符
23、xdigit    验证某个字段的值只能是十六进制字符串
24、activeUrl    验证某个字段的值是否为有效的域名或者IP
25、url        验证某个字段的值是否为有效的URL地址
26、ip        验证某个字段的值是否为有效的IP地址
27、dateFormat:format 验证某个字段的值是否为指定格式的日期 例如:
    'create_time'=>'dateFormat:y-m-d'
28、mobile    验证某个字段的值是否为有效的手机
29、idCard    验证某个字段的值是否为有效的身份证格式
30、macAddr    验证某个字段的值是否为有效的MAC地址
31、zip        验证某个字段的值是否为有效的邮政编码
32、in        验证某个字段的值是否在某个范围 例如:'num'=>'in:1,2,3'
33、notIn 验证某个字段的值不在某个范围
34、between 验证某个字段的值是否在某个区间
35、notBetween 验证某个字段的值不在某个范围
36、length:num1,num2  验证某个字段的值的长度是否在某个范围
37、max:number    验证某个字段的值的最大长度
38、min:number    验证某个字段的值的最小长度
39、confirm        验证某个字段是否和另外一个字段的值一致
    例如:'repassword'=>'require|confirm:password'
    自动匹配验证规则:
    如password和password_confirm是自动相互验证
    只需要使用 'password'=>'require|confirm'

 

七、表单令牌

 验证规则支持对表单的令牌验证:

 
HTML:
<input type="hidden" name="__token__" value="{:token()}" />
//也可以直接使用
{:token_field()}

控制器验证规则:

$check = request()->checkToken('__token__');
if(false === $check) {
    return "token 验证失败";
}

 

 

 

posted @ 2021-11-04 15:30  yangphp  阅读(3316)  评论(0编辑  收藏  举报