{"id":926,"date":"2014-10-14T15:11:06","date_gmt":"2014-10-14T07:11:06","guid":{"rendered":"http:\/\/blog.turn.tw\/?page_id=926"},"modified":"2014-10-14T15:30:28","modified_gmt":"2014-10-14T07:30:28","slug":"%e5%9b%9e%e6%87%89%e8%ab%8b%e6%b1%82%ef%bc%9asupportfacadesresponse-php","status":"publish","type":"page","link":"https:\/\/blog.turn.tw\/?page_id=926","title":{"rendered":"\u591a\u7a2e\u56de\u61c9\uff1aSupport\/Facades\/Response.php"},"content":{"rendered":"<p>\u5728\u5b98\u65b9\u6587\u4ef6\uff1a<a href=\"http:\/\/laravel.com\/docs\/4.2\/responses\" title=\"Views &#038; Responses\">Views &#038; Responses<\/a>\u88e1\u547c\u53ebResponse\u985e\u5225\u975c\u614b\u51fd\u5f0f\uff0c\u80cc\u5f8c\u662f\u5728\u547c\u53eb\u9019\u652fResponse.php\u985e\u5225\u7684\u5be6\u9ad4\u3002<\/p>\n<p>\u9019Response\u985e\u5225\u662fSupport\/Facades\u8cc7\u6599\u593e\u4e2d\uff0c\u552f\u4e00\u6c92\u6709\u7e7c\u627fFacade\u985e\u5225\u7684\u985e\u5225\u3002<br \/>\nLaravel\u5c0dFacade Pattern\u7684\u61c9\u7528\u5e7e\u4e4e\u90fd\u662f\u5229\u7528\u985e\u5225\u975c\u614b\u51fd\u5f0f\u53bb\u547c\u53eb\u67d0\u5be6\u9ad4\u7684\u51fd\u5f0f\u3002<br \/>\n\u6b64Response\u662f\u552f\u4e00\u7684\u4f8b\u5916\u3002\u5b83\u7684\u975c\u614b\u51fd\u5f0f\u5206\u5225\u5c0d\u61c9\u5230\u4e86\u5e7e\u500b\u4e0d\u540c\u7684\u5be6\u9ad4\u3002<\/p>\n<pre>\r\n<?php namespace Illuminate\\Support\\Facades;\r\n\r\nuse Illuminate\\Support\\Str;\r\nuse Illuminate\\Http\\JsonResponse;\r\nuse Illuminate\\Support\\Traits\\MacroableTrait;\r\nuse Illuminate\\Http\\Response as IlluminateResponse;\r\nuse Illuminate\\Support\\Contracts\\ArrayableInterface;\r\nuse Symfony\\Component\\HttpFoundation\\StreamedResponse;\r\nuse Symfony\\Component\\HttpFoundation\\BinaryFileResponse;\r\n\r\nclass Response {\r\n\r\n\tuse MacroableTrait;\r\n\r\n\t\/**\r\n\t * Return a new response from the application.\r\n\t *\r\n\t * @param  string  $content\r\n\t * @param  int     $status\r\n\t * @param  array   $headers\r\n\t * @return \\Illuminate\\Http\\Response\r\n\t *\/\r\n\tpublic static function make($content = '', $status = 200, array $headers = array())\r\n\t{\r\n\t\treturn new IlluminateResponse($content, $status, $headers);\r\n\t}\r\n<\/pre>\n<p>\u53c3\u898b\u5b98\u7db2\u300cCreating Custom Responses\u300d\u4e00\u7bc0\u3002\u76f4\u63a5\u7528content\u3001status\u3001headers\u5ba2\u88fd\u5316\u4e00\u500b\u5be6\u9ad4\u56de\u61c9\u3002<\/p>\n<pre>\r\n\r\n\t\/**\r\n\t * Return a new view response from the application.\r\n\t *\r\n\t * @param  string  $view\r\n\t * @param  array   $data\r\n\t * @param  int     $status\r\n\t * @param  array   $headers\r\n\t * @return \\Illuminate\\Http\\Response\r\n\t *\/\r\n\tpublic static function view($view, $data = array(), $status = 200, array $headers = array())\r\n\t{\r\n\t\t$app = Facade::getFacadeApplication();\r\n\r\n\t\treturn static::make($app['view']->make($view, $data), $status, $headers);\r\n\t}\r\n<\/pre>\n<p>\u5c07$view\u8207$data\u4e1f\u7d66$app['view'](\u4e5f\u5c31\u662fView\u6a21\u7d44)\u53bbmake\u51fa\u7d50\u679c\uff0c\u518d\u5c07\u7d50\u679c\u8207$status\u8ddf$headers\u4e1f\u7d66\u975c\u614b\u51fd\u5f0fmake\u3002<br \/>\n\u7576\u4f60\u60f3\u7528make\u5ba2\u88fd\u5316response\uff0c\u4f46\u662f\u53c8\u60f3\u4f7f\u7528Laravel\u7684View\u6a21\u7d44\u6642\u7684\u53ef\u7528\u51fd\u5f0f\u3002<br \/>\n\u8ddf\u7528View::make($view, $data)\u7522\u751f\u5167\u5bb9\u518d\u4e1f\u7d66Response::make()\u5176\u5be6\u540c\u6a23\u610f\u601d\u3002<\/p>\n<pre>\r\n\t\/**\r\n\t * Return a new JSON response from the application.\r\n\t *\r\n\t * @param  string|array  $data\r\n\t * @param  int    $status\r\n\t * @param  array  $headers\r\n\t * @param  int    $options\r\n\t * @return \\Illuminate\\Http\\JsonResponse\r\n\t *\/\r\n\tpublic static function json($data = array(), $status = 200, array $headers = array(), $options = 0)\r\n\t{\r\n\t\tif ($data instanceof ArrayableInterface)\r\n\t\t{\r\n\t\t\t$data = $data->toArray();\r\n\t\t}\r\n\r\n\t\treturn new JsonResponse($data, $status, $headers, $options);\r\n\t}\r\n<\/pre>\n<p>\u7522\u751fjson\u683c\u5f0f\u56de\u61c9\u3002\u53c3\u898b\u5b98\u7db2\u300cSpecial Responses\u300d\u4e00\u7bc0\u3002<\/p>\n<pre>\r\n\t\/**\r\n\t * Return a new JSONP response from the application.\r\n\t *\r\n\t * @param  string  $callback\r\n\t * @param  string|array  $data\r\n\t * @param  int    $status\r\n\t * @param  array  $headers\r\n\t * @param  int    $options\r\n\t * @return \\Illuminate\\Http\\JsonResponse\r\n\t *\/\r\n\tpublic static function jsonp($callback, $data = [], $status = 200, array $headers = [], $options = 0)\r\n\t{\r\n\t\treturn static::json($data, $status, $headers, $options)->setCallback($callback);\r\n\t}\r\n<\/pre>\n<p>\u9019\u908a\u5247\u662fJSONP\u7684\u56de\u61c9\u3002<\/p>\n<pre>\r\n\t\/**\r\n\t * Return a new streamed response from the application.\r\n\t *\r\n\t * @param  \\Closure  $callback\r\n\t * @param  int      $status\r\n\t * @param  array    $headers\r\n\t * @return \\Symfony\\Component\\HttpFoundation\\StreamedResponse\r\n\t *\/\r\n\tpublic static function stream($callback, $status = 200, array $headers = array())\r\n\t{\r\n\t\treturn new StreamedResponse($callback, $status, $headers);\r\n\t}\r\n\r\n<\/pre>\n<p>\u7522\u751f\u4e00\u500bSymfony\u7684StreamedResponse\u5be6\u9ad4\u56de\u61c9\u3002<br \/>\n\u9019\u62db\u5728Laravel\u5b98\u7db2\u6c92\u6709\u63d0\u5230\u3002<br \/>\n\u53c3\u8003Symfony API\uff1a<a href=\"http:\/\/api.symfony.com\/2.5\/Symfony\/Component\/HttpFoundation\/StreamedResponse.html\" title=\"StreamedResponse\">StreamedResponse<\/a><\/p>\n<pre>\r\n\r\n\t\/**\r\n\t * Create a new file download response.\r\n\t *\r\n\t * @param  \\SplFileInfo|string  $file\r\n\t * @param  string  $name\r\n\t * @param  array   $headers\r\n\t * @param  null|string  $disposition\r\n\t * @return \\Symfony\\Component\\HttpFoundation\\BinaryFileResponse\r\n\t *\/\r\n\tpublic static function download($file, $name = null, array $headers = array(), $disposition = 'attachment')\r\n\t{\r\n\t\t$response = new BinaryFileResponse($file, 200, $headers, true, $disposition);\r\n\r\n\t\tif ( ! is_null($name))\r\n\t\t{\r\n\t\t\treturn $response->setContentDisposition($disposition, $name, Str::ascii($name));\r\n\t\t}\r\n\r\n\t\treturn $response;\r\n\t}\r\n<\/pre>\n<p>\u7522\u751f\u4e0b\u8f09\u6a94\u6848\u7684\u56de\u61c9\u3002<\/p>\n<pre>\r\n\r\n}\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5728\u5b98\u65b9\u6587\u4ef6\uff1aViews &#038; Responses\u88e1\u547c\u53ebResponse\u985e\u5225\u975c\u614b\u51fd\u5f0f\uff0c\u80cc\u5f8c\u662f\u5728\u547c\u53eb\u9019\u652fR &hellip; <a href=\"https:\/\/blog.turn.tw\/?page_id=926\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">\u591a\u7a2e\u56de\u61c9\uff1aSupport\/Facades\/Response.php<\/span> <span class=\"meta-nav\">&rarr;<\/span> <\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"_mi_skip_tracking":false},"_links":{"self":[{"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/pages\/926"}],"collection":[{"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=926"}],"version-history":[{"count":7,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/pages\/926\/revisions"}],"predecessor-version":[{"id":933,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/pages\/926\/revisions\/933"}],"wp:attachment":[{"href":"https:\/\/blog.turn.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=926"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}