Easyswoole验证器Validate—自定义错误信息
Easyswoole验证器Validate—自定义错误信息
最近公司在用easyswoole开发项目,在用官方自带基础的验证类时,遇到点问题,已经解决,现记录下来。
因为工作中需要用到的数据校验,除了对传入的字段做基础的校验,还有其他比较复杂的校验,需要自定义错误信息。参照官方文档的写法
其实就是EasySwoole\Validate\Rule中的func方法中的第二个参数$msg在这儿并没有起到作用
分析原因,追溯到源码去看:
EasySwoole\Validate\Error类中:
1)获取错误信息:$validate->getError()->__toString(这个是追溯问题的源头,因为返回的信息不是我们预先想要的)
2)获取触发规则消息
3)构造方法
4)这个地方是Error定义的默认错误信息
最后发现问题出在EasySwoole\Validate\Validate的validate()方法中这段代码:
原来官方的代码是:拿那个func方法中的闭包返回的值$result,如果$result为true,就说明验证通过,不会显示错误信息。
否则,经过strval方法得到$resultErr,作为errorRuleMsg去判断,如果$resultErr存在且非空非零,就使用$reultErr来作为错误信息,
否则在就用官方默认func对应的错误信息”:fieldName自定义验证失败”
所以,如果要使用自定义的错误信息,就只能类似这样写:
下面是在控制器中的写法,供参考
$dids = $this->request()->getRequestParam('dids');
$pid = $this->request()->getRequestParam('id');
$disaster_id = $this->request()->getRequestParam('disaster_id');
$validate=new Validate();
$validate->addColumn('id','表单元素ID')->required('不能为空')->integer('必须是整数');
$validate->addColumn('disaster_id','灾难ID')->required('不能为空')->integer('必须是整数');
$dids_arr=explode(',',$dids);
$validate->addColumn('dids','部门ID')->required('不能为空')->regex("/^\d+(,\d+)*$/",'有多个的话,用英文逗号隔开')->func(function ($params,$key) use($dids_arr){
foreach ($dids_arr as $k=>$v){
$form_value_info=TagDepModel::create()->where('did',$v)->get();
if(!$form_value_info){
return "填写的部门ID不存在";
}
}
return true;
});
if (!$this->validate($validate)){
return $this->returnJson(static::PARAMS_BAD,[],$validate->getError()->getFieldAlias().$validate->getError()->__toString());
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)