TP6验证器“或”运算及2次验证问题

浏览:1278 发布日期:2020/07/01 分类:ThinkPHP6专区 关键字: 验证器
有个登录验证,逻辑是输入的是用户名或者邮箱,如果是邮箱,放行,如果不是邮箱,再验证用户名规则,查阅多遍手册没发现有“或”操作的验证方式,5.1版本的时候是在验证器文件里自定义方法,即先验证是否为邮箱,如果是邮箱返回真,如果不是,再验证用户名规则,代码如下:    protected function check_username($value)
    {
            if ($this::checkRule( $value,'email')){
                return true;
            }
            return $this::checkRule( $value,'chsAlphaNum');

    }
但TP6后貌似$this::checkRule方法用不了了,换其它方法也总是异常,无奈在控制器里写验证逻辑,代码如下:   $validate_result_email = validate::check($data,[
                'username'=>'email'
            ]);
         
            if (!$validate_result_email) {
                $validate_result = $this->validate($data,'User.login');
                if(!$validate_result){
                    $this->error($validate_result);
                }
            }
理论上应该没问题,诡异的是控制器里似乎只能验证操作一次,上面有2次验证器操作,如果只留其中任何一个,没问题,如果同时留着,第一个没问题,第二个就会自动抛出异常,返回一个json,里面有验证错误提示文字,不需要return 或$this->error ,是 $this->validate($data,'User.login');里面抛出来的json。试着重新new一个validate对象,或者用助手函数,也一样。用try去捕获,依然响应500错误,且自动把这个json输出,{code: 0, message: "用户名只能为字母、数字、中文", traces: [{name: "think\exception\ValidateException",…}],…}
code: 0
message: "用户名只能为字母、数字、中文"
traces: [{name: "think\exception\ValidateException",…}]
datas: []
tables: {GET Data: [], POST Data: {username: "!!", password: "123456"}, Files: null,…}
最佳答案
评论( 相关
后面还有条评论,点击查看>>