はじめに
Laravelでフォーム処理をした後に「登録完了しました!」みたいなメッセージを表示したい時、どうしていますか?
多くの場合、redirect()->route(...)->with(...)
を使って、次の画面にメッセージを持たせます。
今回は、このリダイレクトとwithメッセージの使い方について、初心者向けにわかりやすく解説していきます!
やりたいこと
-
処理後に別画面にリダイレクトしたい
-
「登録が完了しました」などのメッセージを表示したい
-
セッションを使ったメッセージの仕組みを理解したい
準備するもの
ライブラリ
Laravel標準機能だけでOKです。追加のライブラリは不要です。
ディレクトリ構成
以下のようなシンプルな構成で進めます。
bash
routes/web.php app/Http/Controllers/UserController.php resources/views/users/create.blade.php resources/views/users/index.blade.php
コードスクリプト
コードスクリプトの概要
ユーザー登録フォームを作成し、登録後にリスト画面へリダイレクトして「登録が完了しました」と表示する例です。
1. ルーティング(web.php)
php
use App\Http\Controllers\UserController; Route::get('/users/create', [UserController::class, 'create'])->name('users.create'); Route::post('/users', [UserController::class, 'store'])->name('users.store'); Route::get('/users', [UserController::class, 'index'])->name('users.index');
2. コントローラー(UserController.php)
php
namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { public function create() { return view('users.create'); } public function store(Request $request) { // 本来はここでバリデーションやDB保存処理 // 例: User::create([...]); return redirect()->route('users.index')->with('success', '登録が完了しました!'); } public function index() { return view('users.index'); } }
3. 登録フォーム(create.blade.php)
blade
<form action="{{ route('users.store') }}" method="POST"> @csrf <label>名前:<input type="text" name="name"></label> <button type="submit">登録</button> </form>
4. 一覧画面(index.blade.php)
php
@if (session('success')) <div class="alert alert-success"> {{ session('success') }} </div> @endif <p>ユーザー一覧を表示する画面です(仮)</p>
実行結果
-
ユーザー登録フォームで送信すると、
-
/users
にリダイレクトされて、 -
登録が完了しました!
というメッセージが画面上に表示されます。
コード解説
with('success', '...')
の意味
これはセッションに一時的な値を保存する命令です。
次のリクエストでのみ使える一時的なフラッシュデータです。
php
return redirect()->route('users.index')->with('success', '登録が完了しました!');
このとき、session('success')
でそのメッセージを取得できます。
注意点
-
with()
で渡す第1引数(success
など)は自分で決めたキー名です。error
,info
などもOK。 -
このメッセージは次のリクエスト1回分のみ表示されます。リロードすると消えるのが特徴です。
- 複数メッセージを渡したい場合は with() をチェーンして使えます:
php
->with('success', '完了')->with('warning', '注意事項もあります')
まとめ
Laravelでは、リダイレクトと一緒に一時的なメッセージをセッションに渡すことで、処理後の画面に完了通知を表示できます。
特にフォーム送信後に「完了しました」と伝えるためには、->with(...)
と session(...)
の組み合わせを覚えておくと便利です!
コメント