サイトを更新しています。 数日間、レイアウトや翻訳に不具合が出ることがあります。ドキュメントは引き続きご利用いただけます。表示が崩れている場合は、後ほど再読み込みしてください。

ホーム Laravel 10.x HTTPリダイレクト

HTTPリダイレクト

10.x 2026年3月7日

#リダイレクトの作成

リダイレクトレスポンスは Illuminate\Http\RedirectResponse クラスのインスタンスで、ユーザーを別のURLにリダイレクトするための適切なヘッダーを含みます。RedirectResponse インスタンスを生成する方法はいくつかありますが、最も簡単なのはグローバルの redirect ヘルパーを使う方法です:

Route::get('/dashboard', function () {
    return redirect('/home/dashboard');
});

送信されたフォームが無効な場合など、ユーザーを前のページにリダイレクトしたいことがあります。その場合はグローバルの back ヘルパー関数を使います。この機能はセッションを利用するため、back 関数を呼び出すルートは web ミドルウェアグループを使うか、セッションミドルウェアがすべて適用されている必要があります:

Route::post('/user/profile', function () {
    // リクエストをバリデート...

    return back()->withInput();
});

#名前付きルートへのリダイレクト

パラメータなしで redirect ヘルパーを呼び出すと、Illuminate\Routing\Redirector のインスタンスが返され、Redirector の任意のメソッドを呼べます。例えば、名前付きルートへの RedirectResponse を生成するには route メソッドを使います:

return redirect()->route('login');

ルートにパラメータがある場合は、route メソッドの第2引数に渡せます:

// URIが profile/{id} のルートの場合

return redirect()->route('profile', ['id' => 1]);

便利なことに、Laravel はグローバルの to_route 関数も提供しています:

return to_route('profile', ['id' => 1]);

#Eloquentモデルを使ったパラメータの自動設定

EloquentモデルからIDパラメータを設定するルートにリダイレクトする場合は、モデル自体を渡せます。IDは自動的に抽出されます:

// URIが profile/{id} のルートの場合

return redirect()->route('profile', [$user]);

ルートパラメータに設定する値をカスタマイズしたい場合は、Eloquentモデルの getRouteKey メソッドをオーバーライドしてください:

/**
 * モデルのルートキーの値を取得します。
 */
public function getRouteKey(): mixed
{
    return $this->slug;
}

#コントローラーアクションへのリダイレクト

コントローラーアクションへのリダイレクトも可能です。コントローラーとアクション名を action メソッドに渡します:

use App\Http\Controllers\HomeController;

return redirect()->action([HomeController::class, 'index']);

コントローラールートにパラメータが必要な場合は、action メソッドの第2引数に渡せます:

return redirect()->action(
    [UserController::class, 'profile'], ['id' => 1]
);

#フラッシュセッションデータを伴うリダイレクト

新しいURLへのリダイレクトとセッションへのフラッシュデータは通常同時に行います。多くの場合、処理成功後にセッションに成功メッセージをフラッシュするためです。便利なように、RedirectResponse インスタンスを作成し、セッションにデータをフラッシュする処理を一連のメソッドチェーンで行えます:

Route::post('/user/profile', function () {
    // ユーザーのプロフィールを更新...

    return redirect('/dashboard')->with('status', 'Profile updated!');
});

RedirectResponse インスタンスの withInput メソッドを使うと、現在のリクエストの入力データをセッションにフラッシュしてからユーザーを新しい場所にリダイレクトできます。入力がセッションにフラッシュされた後は、次のリクエストで簡単に取得できます

return back()->withInput();

リダイレクト後、セッションからフラッシュメッセージを表示できます。例えば、Blade構文での例:

@if (session('status'))
    <div class="alert alert-success">
        {{ session('status') }}
    </div>
@endif