正常時
index.blade.php -> Controller@add(add_flag) -> Model@addバリセーフ-> index.blade.php
index.blade.php -> Controller@edit(edit_flag) -> Model@updateバリセーフ -> index.blade.php
バリデーションアウト時
index.blade.php -> Controller@add(add_flag) -> Model@addバリアウト -> index.blade.php
index.blade.php -> Controller@edit(edit_flag) -> Model@updateバリアウト -> 500エラー
改善例
index.blade.php -> Controller@edit(edit_flag) -> Model@updateバリアウト -> Controller@reEdit -> index.blade.php
index.blade.phpとFormRequestを使いまわして、
追加処理画面と編集画面を兼用した場合の話。
FormRequestを設定して@addと@editの引数のバリデーションしたら、
@editの方だけが500エラーがでて動かないことがありました。
その対処法の一つです。
FormRequestを分けます。
エラーの出なかった@addはそのまま。
エラーの出た@update用をUpdateRequest等とします。
public function rules()
{
//@addのものと同じ
}
//以下追加
protected function failedValidation(Validator $validator)
{
$this->merge(['validated' => 'true']);
throw new HttpResponseException(
//編集 -> バリデーションチェックNG -> リダイレクト
redirect(route('Controller.reEdit'))->withErrors($validator)->withInput()->with('request', $this->request)
);
}
なんてことはありません。
エラーを拾ってバイバス用の@reEditメソッドへ飛ばしているだけです汗
Route::get('/index', 'Controller@index')->name('Controller.index');
//getメソッドとすることで正常動作
Route::get('/reedit', 'Controller@reEdit')->name('Controller.reEdit');
public function reEdit(Request $request) {
$old_input = $request->session()->get('_old_input');
//$usersが複数形なのはindex.blade.phpの引数に合わせてます
//違和感バリバリですみません・・
$users = new Model;
//バリデーションアウトなデータを直してもらうために
$users->id = $old_input['id'];
$users->name = $old_input['name'];
$users->tel = $old_input['tel'];
$is_edit = true;
return view('Controller.index', compact('is_edit', 'users'));
}
以上です。
追加画面と編集画面を分けていればおそらくこんなことにはならない。
コードの好みの問題かなあ。