Laravelのバリデーションチェック機能で
コントローラー内の初期アクセスメソッドに直接書いた時と、そのメソッドから外出しした時とで
挙動が違います。他のメソッドに外出しした時にrequiredのチェックが機能しません。
二つの書き方で何が異なっているかわかる方教えて下さい。
##requiredが機能するソース
//コントローラー // public function charge(Request $request): RedirectResponse { //バリデーションチェック // $this->checkValidation($request); $req = $request->all(); $rules = [ 'code' => ['required', 'digits:6'] ]; $messages = [ 'required' => '入力必須項目です', 'digits' => ':digits ケタで入力して下さい' ]; $validator = Validator::make($req, $rules, $messages); if($validator->fails()){ return redirect()->back() ->withErrors($validator)->withInput(); } //以下省略 } // public function checkValidation(Request $request): RedirectResponse // { // }
##requiredが機能しないソース
public function charge(Request $request): RedirectResponse { //バリデーションチェック $this->checkValidation($request); $user = $request->user('mock'); $code = $request->input('code'); try { $result = $this->service->charge($user, $code); } catch (NotFoundException) { throw new NotFoundHttpException(); } catch (InValidCodeException) { return redirect()->back() ->with(['message' => '入力したコードは無効です。']); } return redirect()->route('balance.index') ->with(['message' => "{$result->chargedPrice}円チャージしました。"]); } //バリデーション機能外だししたメソッド public function checkValidation(Request $request): RedirectResponse { $req = $request->all(); $rules = [ 'code' => ['required', 'digits:6'] ]; $messages = [ 'required' => '入力必須項目です', 'digits' => ':digits ケタで入力して下さい' ]; $validator = Validator::make($req, $rules, $messages); if($validator->fails()){ return redirect()->back() ->withErrors($validator)->withInput(); } }
回答1件
あなたの回答
tips
プレビュー