こんにちは!
中の人です
最近validatorクラスのvalidate関数でリダイレクトした後、エラーメッセージが消えるという不具合?を見つけたので紹介します
どういうこと?
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
'title' => [
'required',
'string',
'max:25',
],
'content' => [
'required',
'string',
'max:4000',
],
'tag' => [
'nullable',
'string',
],
]);
$validator->validate(); // 👈 これ
よくあるバリデーションの処理ですが、この
$validator->validate();
これでリダイレクトして直前の画面に遷移した際に、エラーメッセージがなくなるということです。
多分同じ現象に遭遇した方のQ&A:
上記の内容だとcookieがどーのこーのということで、よくわからなかったのですが、投げる値が多かったりすると発生する?みたいな感じ?でした。
解決方法
if ($validator->fails()) {
return redirect()
->back()// 👈 直前の画面へ
->withInput()// 👈 投げた値の保持
->withErrors($validator);// 👈 エラーメッセージの保持
}
こうすると不具合は解消されました。
ちなみにこの不具合を発見したlaravelのバージョンは8.xです
なので最新のバージョンでも発生するかもです。
頭の片隅に置いておくといいかもです。
終わりに
確かにこの不具合出た時のフォームの数多かったからなー
ということで
おすー(゚∀゚ )