質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

エラー

エラーは、開発中に発生するエラーの種類、原因、対処方法を共有する投稿に使われます。具体的なエラーメッセージの説明も含まれます。

Q&A

解決済

1回答

230閲覧

[Laravel]FormRequestを使用したバリデーションエラーの表示

matsunaga.N

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

エラー

エラーは、開発中に発生するエラーの種類、原因、対処方法を共有する投稿に使われます。具体的なエラーメッセージの説明も含まれます。

0グッド

0クリップ

投稿2025/05/17 16:33

実現したいこと

Laravel のログイン画面にてForm Requestを使用したバリデーションエラーを表示させたいです。

発生している問題・分からないこと

バリデーションエラーをテストしてみると、どうやらFormRequestではなくvalidation.phpで設定しているバリデーションエラーが表示されています。

該当のソースコード

LoginRequest.php

1public function rules() 2 { 3 return [ 4 'email' => ['required','string','email'], 5 'password' => ['required','min:8',], 6 ]; 7 } 8 9 public function messages() 10 { 11 return [ 12 'email.required' => 'メールアドレスを入力してください', 13 'email.email' => 'メールアドレスを入力してください', 14 'password.required' => 'パスワードを入力してください', 15 'password.min' => 'パスワードは8文字以上で入力してください', 16 ]; 17 }

FortifyServiceProvider.php

1Fortify::authenticateUsing(function ($request) { 2 $validator = Validator::make($request->all(), (new LoginRequest())->rules(), (new LoginRequest())->messages()); 3 if ($validator->fails()) { 4 return null; 5 } 6 7 if (!Auth::attempt($request->only('email', 'password'))) { 8 return null; 9 } 10 11 return Auth::user(); 12 });

login.balde.php

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

①login.blade.phpにて$errors->any() ではなくsession('errors')->all()でエラーメッセージを取得しました。
②FortifyServiceProvider.phpにredirect()->route('login')->withErrors($validator)->withInput(); を追加して、エラーをビューに渡してみました。
①、②を実行後、artisanコマンドでキャッシュのクリアを行い、テストを行いましたがやはり、validate.phpからの文言で行われております。

補足

ログイン画面のパスの設定はFortifyServiceProviderで行なっているので、本来はControllerで行うのでしょうが認証機能のこともありFortifyServiceProviderで呼び出しています。
自己解決が困難な状態なので、ご教授のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

authenticateUsingというメソッドがあるのを正直知らなかったかもしれないです。。。
バリデーションに失敗した場合はデフォルトでは422エラーを返してリダイレクトするはずです。

一応chatGPTの生成したコードですが、以下のようになるようです。
下記コードを試して見ても、設定したエラーメッセージが出ないでしょうか。

php

1use App\Http\Requests\LoginRequest; 2 3public function boot() 4{ 5 Fortify::authenticateUsing(function (Request $request) { 6 $loginRequest = LoginRequest::createFrom($request); 7 $loginRequest->setContainer(app())->setRedirector(app('redirect')); 8 $loginRequest->validateResolved(); 9 10 $user = User::where('email', $request->email)->first(); 11 12 if ($user && Hash::check($request->password, $user->password)) { 13 return $user; 14 } 15 }); 16} 17

投稿2025/05/18 13:01

utm.

総合スコア855

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matsunaga.N

2025/05/18 23:56

回答ありがとうございます。 提案していただいたコードで試してみて参考にはなったのですが、やはりvalidation.phpからのバリデーションメッセージが表示されてしまいます。
matsunaga.N

2025/05/22 12:16

validation.phpのattributeの要素を使用したらバリデーションエラーの表示ができました! 解決に導いてくださりありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問