• TP6中验证器的使用


    TP6中验证器的使用

     

    一、定义验证器

    方式1:在目录app目录下,生成 validate目录,然后创建相应的验证器。
    方式2:通过命令行工具执行命令: php think make:validate User
     
    刚生成的验证器,代码如下:
    <?php
    declare (strict_types = 1);
    
    namespace appvalidate;
    use thinkValidate;
    
    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 appvalidate;
    use thinkValidate;
    
    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 验证失败";
    }

    但行好事,莫问前程!

    本文来自博客园,作者:yangphp,转载请注明原文链接:https://www.cnblogs.com/ypeih/p/15508398.html

  • 相关阅读:
    REST easy with kbmMW #16 – Multiple servers using HTTP.sys transport
    Delphi直接实现分享图片功能
    kbmMW随机数与强密码
    kbmMW基于硬件生成随机数
    用StringHelper.Split分解字符串
    安装和配置HyperServer
    深入了解HyperServer
    Delphi revelations #1 – kbmMW Smart client on NextGen (Android) – Scope problems
    ClientAsTemplate用法
    Java8 Optional总结
  • 原文地址:https://www.cnblogs.com/ypeih/p/15508398.html
Copyright © 2020-2023  润新知