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,…} 最佳答案