すべてのルートとコントローラーはユーザーのブラウザに何らかのレスポンスを返す必要があり、laravel はレスポンスを返すためのさまざまな方法を提供します。最も基本的な応答は、単にルートまたはコントローラーで文字列を返すことです:
Route::get('/', function () { return 'Hello World';});
ここで返された文字列は、laravel によって HTTP 応答に自動的に変換され、送信されます。
ほとんどの場合、ルーティングまたはcontrol ハンドラーの動作は、IlluminateHttpResponse インスタンスまたはビューを返す必要があります。レスポンス インスタンスを使用すると、レスポンス ヘッダーとレスポンス ステータスを簡単にカスタマイズできます。 Response インスタンスは、HTTP レスポンスを生成するためのさまざまなメソッドを提供する SymfonyComponentHttpFoundationResponse クラスを継承します。
use Illuminate\Http\Response;Route::get('home', function () { return (new Response($content, $status)) ->header('Content-Type', $value); });
laravel は、便利なレスポンス グローバル ヘルプも提供します。 Response インスタンスで使用できるすべてのメソッドについては、API ドキュメントと Symfony API ドキュメントを参照してください。
Response インスタンスのほとんどのメソッドはチェーン呼び出しを許可しており、チェーン呼び出しを使用して構築できます。流暢に答えます。たとえば、header メソッドを使用して、ユーザー クライアントに送信される前にさまざまな応答ヘッダーを追加できます:レスポンスヘッダーを添付する
Route::get('home', function () { return response($content, $status) ->header('Content-Type', $value);});
return response($content) ->header('Content-Type', $type) ->header('X-Header-One', 'Header Value') ->header('X-Header-Two', 'Header Value');
Response インスタンスの Cookie は、単純に Cookie 情報をレスポンスに追加できます。たとえば、cookie メソッドを使用して cookie を生成し、それを応答に追加できます:
return response($content) ->withHeaders([ 'Content-Type' => $type, 'X-Header-One' => 'Header Value', 'X-Header-Two' => 'Header value' ]);
return response($content) ->header('Content-Type', $type) ->cookie('name', 'value');
->cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
応答ヘルパー メソッドを使用して、他のタイプの応答インスタンスを簡単に生成することもできます。パラメーターを渡さずに応答ヘルパー メソッドを使用すると、IlluminateContractsRoutingResponseFactory コントラクトを実装するインスタンスが返されます。コントラクトには、応答を生成するためのさまざまな便利なメソッドが用意されています。
応答ヘッダーと応答のステータスを制御し、応答のコンテンツとしてビューを返す必要がある場合は、次のようにすることができます。 view メソッドを使用します:
protected $except = [ 'cookie_name'];
JSON レスポンス
json メソッドは、レスポンス ヘッダーの Content-Type を application/json に自動的に設定し、json_encode メソッドを使用して、提供された配列を JSON:
return response() ->view('hello', $data) ->header('Content-Type', $type);
return response()->json(['name' => 'Abigail', 'state' => 'CA']);
download メソッドは、クライアント ブラウザに指定されたパスのファイルを強制的にダウンロードする応答を返すことができます。ダウンロード メソッドでは、ブラウザがダウンロードするときに 2 番目のパラメータをファイル名として渡すこともできます。また、http 応答ヘッダー配列を 3 番目のパラメータとして渡すこともできます。ファイル名
ファイル応答
file メソッドを使用すると、画像または PDF タイプのファイルを直接ダウンロードするのではなく、ブラウザーで直接表示できます。このメソッドは、最初のパラメーターとしてファイル パスを受け取り、2 番目のパラメーターとして HTTP 応答ヘッダー配列も受け取ることができます:
Redirectreturn response() ->json(['name' => 'Abigail', 'state' => 'CA']) ->setCallback($request->input('callback'));ログイン後にコピー
return response()->download($pathToFile);return response()->download($pathToFile, $name, $headers);
return response()->file($pathToFile);return response()->file($pathToFile, $headers);
Route::get('dashboard', function () { return redirect('home/dashboard'); });
Route::post('user/profile', function () { // Validate the request... return back()->withInput();});
return redirect()->route('profile', [$user]);
你也可以生成重定向信息到控制器的某个行为.你可以简单的通过action方法传递控制器名称和控制器行为来做到这些.你应该注意,你并不需要特别的指出控制器的全部命名空间,因为laravel的RouteServiceProvider已经自动的设置了默认的命名空间:
return redirect()->action('HomeController@index');
当然,如果你的控制器行为也接收其他的参数,你同样可以在action方法中传递第二个参数:
return redirect()->action('UserController@profile', ['id' => 1]);
你可以通过RedirectResponse实例的链式调用来做到在生成重定向信息的同时闪存seession数据,这在执行行为之后存储消息状态的场景尤其有用:
Route::post('user/profile', function () { // Update the user's profile... return redirect('dashboard')->with('status', 'profile updated'); });
当然,在用户重定向到新页面时,你是可以访问到闪存的会话信息的,例如,在blade模板中,你可以这么使用:
@if (session('status')) <div class="alert alert-success"> {{ session('status')}} </div>@endif
如果你想自定义某种可复用的响应,你可以使用Response facade的 macro方法或者提供Illuminate\Contracts\Routing\ResponseFactory的一个实现:
<?phpnamespace App\Providers;use Response;use Illuminate\Support\ServiceProvider;class ResponseMacroServiceProvider extends ServiceProvider { public function boot() { Response::macro('caps', function ($value) { return Response::make(strtoupper($value)); }); }}
macro方法接收一个别名作为第一个参数,接收一个闭包作为第二个参数。闭包会在访问ResponseFactory实现的实例的动态属性macro别名时执行,或者通过全局帮助方法response:
return response()->caps('foo');