メインコンテンツまでスキップ
バージョン: 9.x

HTTP Redirects

Creating Redirects

リダイレクト応答は 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();
});

Redirecting To Named Routes

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

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

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

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

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

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

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

Populating Parameters Via Eloquent Models

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.
*
* @return mixed
*/
public function getRouteKey()
{
return $this->slug;
}

Redirecting To Controller Actions

controller actions へのリダイレクトを生成することもできます。これを行うには、コントローラとアクション名を action メソッドに渡します。

use App\Http\Controllers\HomeController;

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

コントローラ ルートにパラメーターが必要な場合は、それらを action メソッドの 2 番目の引数として渡すことができます。

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

Redirecting With Flashed Session Data

通常、新しい URL へのリダイレクトと flashing data to the session は同時に行われます。通常、これはアクションが正常に実行された後で、成功メッセージをセッションにフラッシュするときに行われます。便宜上、RedirectResponse インスタンスを作成し、単一の滑らかなメソッド チェーンでセッションにデータをフラッシュすることができます。

Route::post('/user/profile', function () {
// Update the user's profile...

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

RedirectResponse インスタンスによって提供される withInput メソッドを使用して、ユーザーを新しい場所にリダイレクトする前に、現在のリクエストの入力データをセッションにフラッシュできます。入力がセッションにフラッシュされると、次のリクエスト中に簡単に retrieve it を実行できます。

return back()->withInput();

ユーザーがリダイレクトされた後、session からフラッシュされたメッセージを表示できます。たとえば、Blade syntax を使用すると、次のようになります。

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