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());
}

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM