今回はLaravelでリダイレクト処理する方法についてまとめました。
リダイレクト処理の基本的な書き方から、パラメータの付け方、セッションを持たせる方法など実際の実用事例も合わせて紹介します。
Laravelでリダイレクトする方法
それではまずは基本的なリダイレクトの方法を紹介します。
使用するのは「redirectヘルパ」です。
return redirect('/user/post');
こうすることで、「https://test.com/user/post」にリダイレクトされるようになります。
「redirect()」の第一引数にリダイレクトさせたいパスを指定します。
このredirectヘルパーには全部で第4引数まで設定可能になっています。
第二引数以降もこれから紹介していきます。
第二引数でHTTPのステータスコードを設定
続いて第二引数ではHTTPのステータスコードを設定することができます。
以下コードが301リダイレクトの例です。
return redirect('/user/post', 301);
第二引数を省略した場合は302リダイレクトになるので301リダイレクトにしたい場合などは設定が必要です。
第三引数でHTTPヘッダーを設定
続いて第三引数です。
第三引数では、HTTPヘッダーを設定することができます。
HTTPヘッダーに追加情報を加えたい場合は設定しましょう。
return redirect('/user/post', 301, ["TestHeader" => "test"]);
このようにキーとバリューで設定することができます。
こうすることでResponse Headerに表示されるようになります。
複数表示させんたい場合は、以下コードのようにカンマで区切ればOKです。
return redirect('/user/post', 301, [
"TestHeader" => "test",
"TestHeader2" => "test2",
]);
第四引数でhttps通信にするかを設定
最後、第四引数ではhttps通信にするかの設定をすることができます。
trueにすることでhttps通信になります。
return redirect('/user/post', 301, ["TestHeader" => "test"], true);
route()を使ったリダイレクト方法
続いてはroute()を使ったリダイレクト方法です。
redirect()に引数を何も入れないと、routeメソッドを使用することができます。
その中でルーティングで設定したroute名を指定してリダイレクトさせることができます。
return redirect()->route('test.route');
//パラメータ付きのルーティング(test_route/{id})の場合
return redirect()->route('test_route', ['id' => 1]);
//クエリパラメータを付けたい場合
return redirect()->route('test', ['query' => 'test']);
//パラメータ付きルーティング+クエリパラメータをつける
return redirect()->route('test_route', ['id' => 1, 'query' => 'test']);
// http://test.com/test_route/1?query=test
サンプルのように、パラメータ付きのルーティングの場合も対応可能です。
クエリパラメータを付けたい場合も第二引数にキーとバリューで設定することで可能です。
パラメータ付きルーティングにクエリパラメータを付けたい場合は、先にルーティングのパラメータで間まで区切って付けたいクエリパラメータを設定します。
セッションデータとともにリダイレクト
続いてはセッションデータとともにリダイレクトさせる場合です。
この場合はwith()を使います。
return redirect('test')->with('session_test' => 'ok');
//複数のセッションデータを格納する場合
return redirect('test')->with([
'session_test' => 'ok',
'session_test2' => 'no'
]);
セッションをblade側で表示させる場合はこんな感じで表示させたりできます。
@if (session('session_test'))
<div>
{{ session('session_test') }}
</div>
@endif
sessionの存在判定を行わないと、エラーが起きるので忘れないようにしましょう。
直前のページへ戻るリダイレクト
フォームなどの処理で何らかの入力エラーで次のページへ行かせたくない場合に直前のページへ戻すこともできます。
back()を使います。
以下記事で詳しく解説しています。
【Laravel】直前のページにリダイレクトさせるback()について
エンジニアにおすすめ書籍
エンジニアになりたて、これから勉強を深めていきたいという方におすすめの書籍はこちら!