はじめに
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(...) の組み合わせを覚えておくと便利です!

 
  
  
  
  

コメント