#はじめに
ControllerやRouteからViewを展開する方法に
view()とredirect()をよく使いますが、その違いはなんでしょうか。
例えば
return view('profile.index')
return redirect('profile/index')
こちらはどちらも同じ結果を返します。
中身はどう違い、どういう原理で動いているのか、疑問に思ったので調べてみました。
#view()
resources/views
ディレクトリに保存されているファイルを呼び出し相手のブラウザに表示させることができます。
例えば
<html>
<body>
<h1>My name is kenji.</h1>
</body>
</html>
上記、resources/views/profile/index.blade.php
という
Blade記法のファイルをRouteから直接呼び出し相手ブラウザに表示させたいときは
Route::get('profile/index', function () {
return view('profile.index');
});
となり、https://~~/profile/index
にアクセスがあると
index.blade.php
がレンダリングされブラウザに表示されます。
#redirect()
ユーザーを他のURLへリダイレクトさせることができます。
リダイレクトとは
別のページへ転送すること
出力先を本来のものから変えること
参照:https://wa3.i-3-i.info/word1482.html
redirect()は直接表示させたいViewを呼び出しているのではなく
RouteのGETリクエストからredirect()を介し
別のRouteのGETリクエストを通りViewを呼び出しています。
例えば
Route::get('test-redirect', function () {
return redirect('profile/index');
});
/*上記、redirect('profile/index')から
下記、get引数の'profile/index'へ*/
Route::get('profile/index', function () {
return view('profile.index');
});
https://~~/test-redirect
にアクセスがあったとすると
redirect('profile/index')
によってhttps://~~/profile/index
へアクセスを返し
view('profile.index')
によってindex.blade.php
を表示させています。
この場合、イメージとしては2回Routeを通しています。
つまり、GETリクエストが2回行われていることになります。
#まとめ
####view()
RouteやControllerから直接ファイルを呼び出し、ブラウザへ表示させています。
####redirect()
RouteやControllerから別のRouteへリクエストを出し、
そのRouteに沿ってViewを表示させています。
#参照
公式:ビュー
https://readouble.com/laravel/5.5/ja/views.html
公式:レスポンス(リダイレクト)
https://readouble.com/laravel/5.5/ja/responses.html
※redirectはControllerアクションへリダイレクトすることもできたりと
他にも機能は様々です。詳しくは上記からお願いいたします。
最後までありがとうございます。
間違いご指摘ありましたら編集リクエストやコメントをしていただけると幸いです。