搜索
系统检测到您的用户名不符合规范:

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

浏览:1292 发布日期: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,...}
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
南方站长网
积分:785 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /