こんにちは。
Laravelのview()とredirect()の違いがいまいちわからず、自身で調べて納得できるレベルになったのでまとめてみました。
view()もredirect()もそれぞれ、(何らかの処理を行ったりした後に)ページ遷移をさせる処理です。
#view()#
表記の仕方は以下の通りです。
redirect()もそうですがController側に書きます。
public function index()
{
$message = 'ようこそ'
return view('welcome', ['message' => $message]);
}
上記の場合、welcome.blade.phpにmessageという情報を保持させたまま、画面に表示させることになります。
この時ですが、welcome.blade.phpは resoure -> views 内にwelcome.blade.phpが存在するか確認し、存在した場合は表示処理が行われます。(レンダリング)
web.phpに記載する
Route::get('welcome', 'WelcomeController@index')
が行われているわけではないので注意しましょう。
#redirect()#
表記の仕方は以下の通りです。
WelcomeController.phpの表記を少し変更しました。
public function post()
{
return redirect('/welcome');
}
リダイレクト処理が行われた場合、web.phpに記載されるルーティング情報が読み込まれます。
正確にはRoute::get()が読み込まれます。詳細は後述します。
view()のように直接ファイルを読みに行ってるわけではないので注意しましょう。
#view()とredirect()の使い分け#
view()はWebページのアクセス時などのGET処理時に利用します。
そのため、Route::get()で利用されます。
それに対し、redirect()はフォーム送信などのPOST時に利用されます。
そのため、Route::post()で呼び出すメソッド内に記述します。
注意したいのが、RedirectはGET判定されることです。
そのためredirect()が実行されると、web.phpのRoute::get()が読み込まれるため注意しましょう。
redirect()を利用するときは以下のように誤ってRoute::getで呼び出したメソッド内に、redirect('welcome')など書かないようにしましょう。
// WelcomeController.php
public function index() {
return redirect('/welcome');
}
// web.php
Route::get('/welcome', 'WelcomeController.php@index);
この場合 redirect('welcome') -> Route::get('welcome...)読み込み -> redirect('welcome') -> Route::get('welcome...)読み込み
と延々に処理を繰り返してしまうためです。
#おわりに#
個人的に結構理解するのに時間がかかったため参考になれば幸いです。