【Laravel】リダイレクトとwithメッセージの基本|処理後に「完了」を表示しよう

はじめに

Laravelでフォーム処理をした後に「登録完了しました!」みたいなメッセージを表示したい時、どうしていますか?
多くの場合、redirect()->route(...)->with(...) を使って、次の画面にメッセージを持たせます。

今回は、このリダイレクトとwithメッセージの使い方について、初心者向けにわかりやすく解説していきます!


やりたいこと

  1. 処理後に別画面にリダイレクトしたい

  2. 「登録が完了しました」などのメッセージを表示したい

  3. セッションを使ったメッセージの仕組みを理解したい


準備するもの

ライブラリ

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

コメント

タイトルとURLをコピーしました