laravel 中增加 自定義 驗證規(guī)則

本文是在request文件中進行驗證,也就是把驗證規(guī)則寫在request文件中獨立出來。

示例 request:UserRequest

1、在控制器中,直接傳入UserRequest參數(shù)

    public function del(UserRequest $request){}

2、在app/Providers/AppServiceProvider.php中的boot里面增加要自定義的驗證規(guī)則
  Validator::extend('check_exists', function ($attribute, $value, 
$parameters, $validator) {
        if ($attribute == 'id'){
         return call_user_func($parameters[0].'::checkIdExist', 
$value) ? true : false;
       } else {
         return call_user_func($parameters[0].'::checkFieldExist', 
$attribute, $value) ? true : false;
       }
  });
  • check_exists為規(guī)則調用的名稱,$attribute為要驗證的字段,$value為該字段的值,$parameters為傳入的參數(shù)。方法接受布爾返回值。
  • 本段代碼意思為創(chuàng)建一個名為check_exists的驗證,當傳入的是id字段,調用 model:: checkIdExist($value) 方法。
3、UserRequest中調用方式
正常的調用方式
    public function rules()
    {
        return 'id' => 'required|numeric|min:0|check_exists:app\Model\User';
    }

在UserRequest中的rules直接寫調用規(guī)則check_exists:app\Model\User即可。

擴展整合調用方式
    public function rules()
    {
        return $this->rules_merge( ['id' => 'required|numeric|min:0'], 
$this->rules_input_id(User::class));
    }
    public function rules_merge($origin, $addition){
        $r = collect($origin)->map(function ($value, $key) use(&$addition){
            if (array_key_exists($key, $addition)){
                array_unshift($addition[$key], $value);
                $join =  join("|", $addition[$key]);
                unset($addition[$key]);
                return $join;
            } else {
                return $value;
            }
        })->all();

        return array_merge($r, $addition);
    }

    public function rules_input_id($database){
        if (!empty($this->input('id'))){
            return ['id' => [join(":", ["check_exists", $database])]];
        }

        return [];
    }
  • 該擴展主要是把需要的規(guī)則整合進去原來的規(guī)則里面。
  • $this->rules_input_id(User::class) 是生成一個規(guī)則格式,改規(guī)則格式生成如check_exists:app\Model\User方式的格式。
  • rules_merge是把原來的規(guī)則required|numeric|min:0跟check_exists:app\Model\User規(guī)則整合在一起生效。最終得到的是required|numeric|min:0|check_exists:app\Model\User規(guī)則。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1、簡介 Laravel 提供了多種方法來驗證應用輸入數(shù)據(jù)。默認情況下,Laravel 的控制器基類使用Valid...
    伊Summer閱讀 1,615評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 經(jīng)過對django的初步學習,我們已經(jīng)對后臺的基本流程以及django的運作有了一定的了解,但是這還不足夠,dja...
    coder_ben閱讀 3,955評論 8 34
  • 為什么進行單元測試 在我們開發(fā)的app的時候,可能會出現(xiàn)一些邏輯問題是測試人員測試不到的,或者在測試前需要自測的時...
    mymdeep閱讀 4,434評論 2 4
  • 一 我在夢里出走,一往無前,一無所有。 一人,一包,一顆流浪遠方的破碎的心。 只因為,聽說你愛我。 二 我已經(jīng)習慣...
    夜微語z閱讀 362評論 8 1

友情鏈接更多精彩內容