今回は、Laravelのhttpレスポンスの返し方を見ていきます。
自分で実装すると複雑なhttpレスポンスですが、Laravelを使えば簡単に実装ができます。
Laravelライフサイクル-リクエスト発生からレスポンスを返すまで
もくじ
レスポンスの生成
Laravelのレスポンスを返すのは以下の3パターンにわかれます。
- 1,文字列、配列を返す
- 2,viewヘルパー関数を返す
- 3,レスポンスオブジェクトを返す
まずは単純な文字列、配列を返すパターンを見ていきましょう。
1つ目|文字列と配列を返すパターン
コントローラーを返さずに、文字列を返したいという場合、(想定としては、ルートが通っているか確認したい場合など)下記のように記載すれば可能です。
Route::get('/', function () return ‘Sample’; });
下記のように配列を記載すると、自動的に配列をJsonレスポンスに変更してくれます。便利ですねー!
Route::get('/', function () return 1, 2, 3; });
もちろん、上記のような単純な仕様はなかなかないと思いますので、次は、より実践的なviewヘルパー関数を使う場合を見ていきましょう、
2つ目|viewsを返すパターン
レスポンスのステータスやヘッダをコントロールしながらも、レスポンス内容としてビューを返す必要がある場合は、viewメソッドを使用してください。
Route::get(‘/‘,function() return view(‘welcome’); } });
上記のようにすることで、resource/views配下にあるbladeファイルを参照してviewを表示することができます。
変数を加えて渡したい場合
初学者の場合は、下記のように渡すのが最も分かりやすいでしょう。
public function index(){ $test = “sample”; return view('messages.index', [ 'm' => $test, ]); }
変数を、配列に入れて配列で渡しています。理解をする際にはこれで構いませんが、実際に使うとなるとcompact関数を使うのがより実践的でしょう。
Compact関数を使う場合は同じ処理を下記のように記載できます。
public function index(){ $test = “sample”; return view('messages.index', compact(‘test’) }
*compact関数とは
実施していることは、上記で説明したことと変わりません。compact関数は、渡された変数名と値から配列を生成し返します。laravelではなくphpのヘルパ関数となります。下記が使用例になります。
<?php $one = 1; $two = 2; $three = 3; $four = 4; $five = 5; $array = compact( “one”, “two”, “three”, “four”, “five” ); print_r( $array ); ?> Array ([one => 1],[two => 2],[three => 3],[four => 4],[five=> 5])
ヘッダーを付与したい場合
ヘッダーを付与したい場合は、responseを最初に入れて、メソッドチェーンでviewヘルパ関数➡︎headerとしてください。
return response() ->view('hello', compact(‘test’)) ->header('Content-Type', $type);
3つ目|レスポンスオブジェクトを返すパターン
Viewのところで、少し出てきましたが、
続いて、レスポンスオブジェクトを返すパターンを見ていきましょう。
レスポンスオブジェクトとは、IlluminateHttpResponseインスタンスを返すということです。
このインスタンスを返すことで、httpステータスコードや先ほどのようにヘッダをカスタマイズすることができます。
まずは一つ例を見てみましょう。
Route::get('home', function () { return response('Hello World', 200) ->header('Content-Type', 'text/plain'); });
上記のresponse()では、返したい文字列と成功したことを表すステータスコード200と単なるテキストデータであることを表すヘッダーを返しています。
*ちなみにですが、このResponseインスタンスは、SymfonyComponentHttpFoundationResponseクラスを継承しております。
さまざまなメソッドが使えるので、その一部を見ていきましょう。
ヘッダを複数セットする
先ほどは一つだけヘッダをセットしていましたが、下記のようにすることでヘッダを複数セットすることができます。
return response($sample) ->header('Content-Type', $type) ->header('X-Header-One', 'Header Value') ->header('X-Header-Two', 'Header Value');
リダイレクトをする
Laravelでredirectを実装するのは、下記のようにredirectメソッドを使うのが簡単です。
Route::get(‘/‘, function () { return redirect('home/welcome’); });
上記のようにするだけで/にアクセスした際に、’home/welcome’にリダイレクトができます。
Routeヘルパ関数を使うと、名前つきルートでリダイレクトができます。
return redirect()->route(‘sample’);
ルートにパラメータが含まれている場合は下記のようにすることでパラメータを含めることができます。
Route::get('/', function () { return redirect()->route(‘sample’, [’id’ => ’1’]); });
外部のurlにリダイレクトしたい場合は下記のようにできます。
return redirect()->away('https://storehouse-techhack.com/');
バリデーション処理からリダイレクトで元の画面に戻したい場合
下記のようにすることで入力したデータを持ったまま、戻すことができます。withinputを忘れてしまうとただの空欄のフォームを戻すという仕様になってしまうので気をつけてください。
Route::post('user/profile', function () { // レスポンスのバリデーション処理… return back()->withInput(); });
よく使います重要!| JSONレスポンスを返したい
json形式で返すのは非常によく使いますので、覚えておいてください。
Laravelでjsonを返す場合は、上述した通りに配列を返すだけでもできるのですが、下記のようにしても返すことが可能です。
jsonメソッドは自動的にContent-Typeヘッダをapplication/jsonにセットし、同時に指定された配列をjsonencode PHP関数によりJSONへ変換します。
return response()->json([ 'name' => ‘taro’, 'id' => 1 ]); );
ファイルのダウンロードを可能にする
downloadメソッドを使用することで、指定のファイルパスのファイルをダウンロードすることができます。
return response()->download($pathToFile);
非公開ファイルをダウンロードさせたい場合
下記のようにすることでstorage/app/public配下にあるファイルのダウンロードを可能にします。
第2引数は、ユーザーがダウンロードするファイル名。
第3引数はHTTPヘッダ。
public function download(Request $request){ $headers = ['Content-Type' => 'text/plain']; $filename = ‘sample.txt'; return response()->download(Storage::path('public/sample.txt'), $filename, $headers); }
*単に公開ファイル(public配下にあるファイル)をダウンロードしたい場合は、下記のようなコードによっても実装ができます。
<a href="{url('/images/sample.png')}" download>ダウンロード</a>
ブラウザにファイルを表示する
fileメソッドは、ダウンロードする代わりに、ブラウザへ画像やPDFのようなファイルを表示するために使用します。このメソッドは第1引数にファイルパス、第2引数にヘッダの配列を指定します。
return response()->file($pathToFile); return response()->file($pathToFile, $headers);
まとめ
Laravelのレスポンスはかなり便利に色々とできるので、ぜひぜひ実装時に使えると良いですね。特にjsonはよく使うので理解しておいくださいね!
こちらの記事もおすすめ!
Laravelを理解するためには、こちらの記事もおすすめですのでみておいてくださいね。Laravel リクエストを自在に操る方法Larval ミドルウェアを完全に理解して独自で作る方法定期更新:Laravel入門 独学学習のための手引き 0から始めるLaravel
コメントを残す