Laravel添加验证场景提高针对性质的验证
生活随笔
收集整理的這篇文章主要介紹了
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添加验证场景提高针对性质的验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 胆碱性荨麻疹是怎么造成的(胆碱性荨麻疹如
- 下一篇: Laravel分页设置与查询构造器查询数