HTTPリダイレクト
リダイレクトレスポンスは、Illuminate\Http\RedirectResponseクラスのインスタンスで、ユーザーを他のURLへリダイレクトするために必要なしっかりとしたヘッダを含んでいる必要があります。RedirectResponseインスタンスを生成する方法はいくつかあります。
引用:HTTPリダイレクト
結論
通常のリダイレクト:redirect
ヘルパを使用する
前のページに戻るリダイレクト:back
ヘルパを使用する
1. redirectヘルパを使用する
Laravelではredirect
ヘルパ関数がグローバルに定義されており、アプリケーションのどこからでも使用できます。
// URLへのリダイレクト
return redirect('home/dashboard');
//名前付きルートへのリダイレクト
return redirect()->route('login');
//名前付きルートへのリダイレクト(パラメータ付き)
return redirect()->route('profile', ['id' => 1]);
// コントローラアクションへのリダイレクト
return redirect()->action('LoginController@login');
// コントローラアクションへのリダイレクト(パラメータ付き)
return redirect()->action('LoginController@login', ['id' => 1]);
// URLでへのリダイレクト(フラッシュメッセージ付き)
return redirect('home')->with('status', 'ログインしました!');
// bladeでこんな感じに描けばフラッシュメッセージを表示できる
@if (session('status'))
<div class="alert alert-success">
{{ session('status') }}
</div>
@endif
2. backヘルパを使用する
back
ヘルパ関数もグローバルに定義されており、アプリケーションのどこからでも使用できます。
// 前の画面に戻る
return back();
// 前の画面に戻る(入力された値は保持する)
return back()->withInput();
// 前の画面に戻る(エラーを設定する)
return back()->withInput()->withErrors([
'email' => '入力必須です。'
]);
// こんな書き方も見たことあるけど、古い書き方で現在は上記のbackヘルパを使う模様
return redirect()->back();
まとめ
2種類のヘルパを使って簡単にリダイレクトができました。
内部的にはどちらもreturnの後のヘルパでIlluminate\Http\RedirectResponse
クラスのインスタンスを作成して返しています。
Illuminate\Http\RedirectResponse
クラスのインスタンスはリダイレクト先のURLやHTTPのステータスコードを保持します。
redirect
ヘルパでは引数で指定したURLを、back
ヘルパでは前画面のURLをそれぞれ設定しているようなイメージでしょうか。
return back()
について内部的に何が起こっているか確認する記事も投稿しているので、よろしければこちらも併せて確認いただければと思います。