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