thinkphp 验证器

方法一

验证器的使用 单独抽离成一个文件

declare (strict_types = 1);

namespace app\validate;

use think\Validate;

class ValidateAll extends Validate
{
    /**
     * 定义验证规则
     * 格式:'字段名' =>  ['规则1','规则2'...]
     *
     * @var array
     * require|max:25 验证规则, 可以多个, 用|隔开
     */
    protected $rule = [
        'username'  =>  'require|max:25|checkName:thinkphp',
        'password' =>  'require|min:6',
        'email' =>  'require|email',
        'price' =>  'float',
        'sum' =>  'number|between:1,100', // 数字, 1-100之间
    ];

    // 自定义规则
    protected function checkName($value, $rule, $data = [])
    {
        return $rule == $value ?  $rule. '是违禁词' : true;
    }

    /**
     * 定义错误信息
     * 格式:'字段名.规则名' =>  '错误信息'
     * 返回的错误信息提示, 如果不满足要求, 可以自定义错误信息
     * @var array
     */
    protected $message = [
        'username.require' => '用户名必须',
        'username.max'     => '用户名最多不能超过25个字符',
        'password.require' => '密码必须',
        'password.min'     => '密码最少不能少于6个字符',
        'email.require' => '邮箱必须',
        'email.email' => '邮箱格式错误',
    ];

    // 场景验证 不同场景验证不同字段  例如 新增,编辑, 登录, 注册
    protected $scene = [
        'login' => ['username', 'password'],
        'register' => ['username', 'password', 'email'],
    ];
}

使用的地方

namespace app\controller;

use app\BaseController;
use app\validate\ValidateAll;
use think\exception\ValidateException;


class Login extends  BaseController
{
    public function index()
    {
       // 公共的验证器
       try {
            // 场景验证
            // validate(ValidateAll::class)->scene('register')->batch(true)->check([
            //   'username' => 'thinkphp',
            //   'password' => '122323',
            //   'email' => '1@gmail.com'
            // ]);
            validate(ValidateAll::class)->batch(true)->check([
                'username' => 'thinkphp',
                'password' => '122323',
                'email' => '1@gmail.com'
            ]);
        } catch (ValidateException $e) {
            // 验证失败 输出错误信息
            dump($e->getError());
        }

    }
}

方法二

直接在组件 类文件使用验证器规则

namespace app\controller;

use app\BaseController;
use think\Validate;


class Login extends  BaseController
{
    public function index()
    {
//        单独在组件使用验证器规则
//        $val = Validate::rule([
//            'username'  =>  'require|max:25|checkName:thinkphp',
//            'password' =>  'require|min:6',
//            'email' =>  'require|email',
//            'price' =>  'float',
//            'sum' =>  'number|between:1,100', // 数字, 1-100之间
//        ]);
//        $res = $val->batch(true)->check([
//            'username' => 'thinkphp',
//            'password' => '122323',
//            'email' => '1@gmail.com'
//        ]);
//        if (!$res) {
//            dump($val->getError());
//        }

//        或者 需要自定义验证方法

        $validate = new class extends Validate {
            protected function checkName($value, $rule, $data = [])
            {
                return $rule == $value ?  $rule. '是违禁词' : true;
            }
        };
        $validate->rule([
            'username'  =>  'require|max:25|checkName:thinkphp',
            'password' =>  'require|min:6',
            'email' =>  'require|email',
            'price' =>  'float',
            'sum' =>  'number|between:1,100', // 数字, 1-100之间
        ]);

        // 验证数据
        $data = [
            'username' => 'thinkphp',
            'password' => '122323',
            'email' => '1@gmail.com'
        ];

        // 执行验证
        $res = $validate->batch(true)->check($data);
        if (!$res) {
            dump($validate->getError());
        }
        echo $res;
    }

  }

posted on   完美前端  阅读(93)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示