メインコンテンツまでスキップ

HTTP リダイレクト

リダイレクトの作成

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

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

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

    Route::post('/user/profile', function () {
// Validate the request...

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

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

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

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

ルートにパラメータがある場合は、2 番目の引数としてそれらを route メソッドに渡すことができます:

    // For a route with the following URI: profile/{id}

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

便宜上、Laravel はグローバルな to_route 関数も提供しています:

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

Eloquent モデルを介したパラメータの設定

Eloquent モデルから取得される "ID" パラメータを持つルートにリダイレクトする場合、モデル自体を渡すことができます。ID は自動的に抽出されます:

    // For a route with the following URI: profile/{id}

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

ルートパラメータに配置される値をカスタマイズしたい場合は、Eloquent モデルの getRouteKey メソッドをオーバーライドする必要があります:

    /**
* Get the value of the model's route key.
*/
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 () {
// Update the user's profile...

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