Laravelでフォーム送信後にリダイレクト・メッセージを表示する方法
先生と生徒の会話形式で理解しよう
生徒
「Laravelでフォームを送信した後に、別のページに移動して成功メッセージを出すことはできますか?」
先生
「はい、できます。Laravelにはredirectとwithを組み合わせることで、フォーム送信後に別ページに移動し、メッセージを表示する機能があります。」
生徒
「redirectって何ですか?ちょっと難しそうです。」
先生
「redirectとは、あるURLに自動で移動することです。例えば郵便局で手紙を受け取ったら、自動的に次の部屋に案内されるイメージです。」
1. 基本的なフォーム送信とリダイレクト
まずは簡単なフォームを作り、送信後に別のページに移動させてみましょう。
<form action="{{ route('form.submit') }}" method="POST">
@csrf
<input type="text" name="name" class="form-control mb-2" placeholder="名前を入力">
<button type="submit" class="btn btn-primary">送信</button>
</form>
public function submit(Request $request)
{
$name = $request->input('name');
// 必要ならここで保存処理
// リダイレクトしてメッセージを表示
return redirect()->route('form.show')->with('success', '送信が完了しました!');
}
ここではredirect()->route()で指定したルートに移動し、with('success', 'メッセージ')でフラッシュメッセージを送信しています。
2. Bladeテンプレートでメッセージを表示
リダイレクト先のページで、フラッシュメッセージを表示するにはBladeで次のように書きます。
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
session('success')で、Controllerから送られたメッセージを受け取ることができます。これによりユーザーは、送信が成功したことを視覚的に確認できます。
3. エラー時のリダイレクトとメッセージ
バリデーションでエラーが発生した場合も、リダイレクトして入力内容を保持しつつエラーメッセージを表示できます。
public function submit(Request $request)
{
$request->validate([
'name' => 'required|max:50',
]);
// 保存処理
// ...
return redirect()->route('form.show')->with('success', '送信が完了しました!');
}
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
Laravelでは$errorsにバリデーションエラーが自動で格納されるので、簡単にエラー表示が可能です。
4. 注意点とポイント
- フォーム送信後は
redirect()->route()で別ページへ遷移させる with()を使うとフラッシュメッセージを簡単に送信できる- Bladeで
session('success')を使ってメッセージを表示 - バリデーションエラーは
$errorsで受け取り、リダイレクト先で表示する - これによりユーザーは送信成功やエラーをすぐに確認でき、UXが向上する