日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Laravel添加验证场景提高针对性质的验证

發布時間:2024/9/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Laravel添加验证场景提高针对性质的验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

laravel沒有場景驗證的概念,是一個驗證類驗證一個函數,驗證數據不是很方便,封裝補足一下

封裝添加場景的方法

<?phpnamespace App\Http\Requests;use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Str; use Illuminate\Http\Exceptions\HttpResponseException; use Illuminate\Contracts\Validation\Validator;/*** 使用方法:* Class AbstractRequest* @package App\Http\Requests*/ class BaseRequest extends FormRequest {public $scenes = [];public $currentScene; //當前場景public $autoValidate = false; //是否注入之后自動驗證public function authorize(){return true;}/*** 設置場景* @param $scene* @return $this*/public function scene($scene){$this->currentScene = $scene;return $this;}/*** 覆蓋自動驗證方法*/public function validateResolved(){if ($this->autoValidate) {$this->handleValidate();}}/*** 驗證方法* @param string $scene* @throws \Illuminate\Auth\Access\AuthorizationException* @throws \Illuminate\Validation\ValidationException*/public function validate($scene = ''){if ($scene) {$this->currentScene = $scene;}$this->handleValidate();}/*** 根據場景獲取規則* @return array|mixed*/public function getRules(){$rules = $this->container->call([$this, 'rules']);$newRules = [];if ($this->currentScene && isset($this->scenes[$this->currentScene])) {$sceneFields = is_array($this->scenes[$this->currentScene])? $this->scenes[$this->currentScene] : explode(',', $this->scenes[$this->currentScene]);foreach ($sceneFields as $field) {if (array_key_exists($field, $rules)) {$newRules[$field] = $rules[$field];}}return $newRules;}return $rules;}/*** 覆蓋設置 自定義驗證器* @param $factory* @return mixed*/public function validator($factory){return $factory->make($this->validationData(), $this->getRules(),$this->messages(), $this->attributes());}/*** 最終驗證方法* @throws \Illuminate\Auth\Access\AuthorizationException* @throws \Illuminate\Validation\ValidationException*/protected function handleValidate(){$instance = $this->getValidatorInstance();if ($instance->fails()) {$this->failedValidation($instance);}$this->passedValidation();}/*** 重寫報錯部分-適應API JSON下發的需求*/protected function failedValidation(Validator $validator){$error= $validator->errors()->all();throw new HttpResponseException(response()->json(['code'=>505,'msg'=>$error['0'],'data'=>[]]));}}

驗證類的使用

<?phpnamespace App\Http\Requests;class MsgBoardRequest extends BaseRequest {/*** Get the validation rules that apply to the request.** @return array*/public function rules(){return ['id'=>'required','title' => 'required|max:10','content' => 'required|max:255',];}/*** 獲取已定義驗證規則的錯誤消息** @return array*/public function messages(){return ['id.required'=>'ID不能為空','title.max' =>'標題太長了,簡化一下吧','title.required' => '標題不能為空','content.max' => '內容太多了','content.required' => '內容不能為空',];}public $scenes = ['addMsg' => ['title', 'content'],'deleteMsg' =>['id']]; }

控制器中進行調用

public function addMsg(MsgBoardRequest $request){$request->validate('addMsg'); } public function deleteMsg(MsgBoardRequest $request){$request->validate('deleteMsg'); }

?

總結

以上是生活随笔為你收集整理的Laravel添加验证场景提高针对性质的验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。