laravelのバリデーションでエラーメッセージが表示されないことがあり困っております。
現象
・ユーザーの新規登録後に登録内容を更新する際、バリデーションに引っかかった場合でもエラーメッセージがでないことがある。その際、DBにデータは保存されません。
・但し、バリデーションに引っかからない内容でフォームからデータを更新(DB保存)し、その後バリデーションに引っかかるデータを入力した場合は、エラーメッセージが正常に表示される
尚、エラーメッセージは日本語化にしており、下記のファイルを内容を変更しております。
/resources/lang/ja/validation.php
→該当箇所を日本語のエラー文に変更
/laravel/config/app.php
→'locale' => 'ja',に変更
ユーザーテーブルの構成
・ID
・メールアドレス
・スキル
・自己紹介
・タイムスタンプ
動作の流れ
1、ユーザー新規登録(ユーザ名とメールアドレスを登録)
※スキルと自己紹介は登録時にnullが入るようにしてあります。
2、プロフィール画面でユーザー情報更新
※ここのバリデーションがうまく動作しておりません。
1.新規登録時のコントローラー(抜粋) protected function create(array $data) { return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); }
2.ユーザー情報更新時のコントローラー(抜粋) public function profile_update(Request $request) { $rules = [ 'name' => 'max:20|min:1', 'skill' => 'max:30', 'background' => 'max:400', ]; $this->validate($request, $rules); $auths = Auth::id(); $lists = \App\User::find($auths); $lists->name = $request->name; $lists->skill = $request->skill; $lists->background = $request->background; $lists->save(); $lists1 = \App\User::where('id', $auths)->get(); return view('profile', [ 'lists1' => $lists1] ); }
ユーザー情報更新時のブレードファイル <form action="/profile_update" method="post"> <table class="t_profile"> @csrf <tr> <th>ニックネーム</th> @if(!empty($list->name)) @if ($errors->has('name')) <td><input type="text" name="name" value="{{old('name')}}"> <span>{{$errors->first('name')}}</span></td> @else <td><input type="text" name="name" value="{{$list->name}}"> @endif </td> @else <td><input type="text" name="name" value="{{old('name')}}"></td> @endif </tr> <tr> <th>スキル・専門性</th> @if(!empty($list->skill)) @if ($errors->has('skill')) <td><input type="text" name="skill" value="{{old('skill')}}"> <span>{{$errors->first('skill')}}</span></td> @else <td><input type="text" name="skill" value="{{$list->skill}}"> @endif </td> @else <td><input type="text" name="skill" value="{{old('skill')}}"></td> @endif </tr> <tr> <th>自己紹介</th> @if(!empty($list->background)) @if ($errors->has('background')) <td><textarea name="background">{{old('background')}}</textarea> <span>{{$errors->first('background')}}</span></td> @else <td><textarea name="background">{{$list->background}}</textarea> @endif </td> @else <td><textarea name="background">{{old('background')}}</textarea></td> @endif </tr> </table> </form>
教えて欲しいこと
・上記のコードや設定で問題がある場合に教えて頂きたいです。
・ユーザーの新規登録の際に自己紹介は登録時にnullが入るようしているのですが、こちらは問題になりそうでしょうか。
あなたの回答
tips
プレビュー