{"id":909,"date":"2014-10-14T12:01:49","date_gmt":"2014-10-14T04:01:49","guid":{"rendered":"http:\/\/blog.turn.tw\/?page_id=909"},"modified":"2014-10-14T14:41:19","modified_gmt":"2014-10-14T06:41:19","slug":"%e6%8e%a5%e5%8f%97%e8%ab%8b%e6%b1%82%ef%bc%9ahttprequest-php","status":"publish","type":"page","link":"https:\/\/blog.turn.tw\/?page_id=909","title":{"rendered":"\u63a5\u53d7\u8acb\u6c42\uff1aHttp\/Request.php"},"content":{"rendered":"<p>\u50b3\u9001HTTP REQEUST\u7d66\u4f3a\u670d\u5668\u6642\uff0c\u901a\u5e38\u6703\u5e36\u6709\u53c3\u6578\uff0c\u6b64\u4efd\u6a94\u6848\u4fbf\u662f\u8655\u7406\u9019\u4e9b\u53c3\u6578\u7684\u985e\u5225\u3002<br \/>\n\u5728\u5b98\u65b9\u6587\u4ef6\uff1a<a href=\"http:\/\/laravel.com\/docs\/4.2\/requests\" title=\"Requests &#038; Input\">Requests &#038; Input<\/a>\u88e1\u5e38\u51fa\u73fe\u7684\u547c\u53ebInput\u985e\u5225\u975c\u614b\u51fd\u5f0f\u3001\u9084\u6709Request\u975c\u614b\u51fd\u5f0f\uff0c\u80cc\u5f8c\u90fd\u662f\u5728\u547c\u53eb\u9019\u652fRequest.php\u985e\u5225\u7684\u5be6\u9ad4\u3002<br \/>\n\u9019\u7a2e\u547c\u53eb\u975c\u614b\u51fd\u5f0f\u53bb\u5c0d\u61c9\u5be6\u9ad4\u7684pattern\u662fFacade Pattern\u7684\u4e00\u7a2e\u61c9\u7528\uff0c\u8acb\u53c3\u898b\uff1a<a href=\"https:\/\/blog.turn.tw\/?page_id=875\" title=\"\u8b93\u4f60\u5c11\u6253\u5f88\u591a\u5b57\uff1aFacades\u3002\">\u8b93\u4f60\u5c11\u6253\u5f88\u591a\u5b57\uff1aFacades\u3002<\/a><br \/>\nLaravel\u4e2d\uff0c\u9019\u500brequest\u5be6\u9ad4\u662f\u5728Foundation\/Application.php\u4e2d\u7684\u5efa\u69cb\u5f0f\u4e2d\u7522\u751f\u3002<br \/>\n<red><br \/>\nInput\u3001Request\u5169\u500bFacades\uff0c\u80cc\u5f8c\u662f\u547c\u53eb\u540c\u4e00\u500b\u5be6\u9ad4\uff1f<br \/>\n\u9019\u6a23\u8a2d\u8a08\u7684\u539f\u56e0\u4f55\u5728&#8230;\u9700\u8981\u7814\u7a76\u4e00\u4e0b\uff1f\uff1f\uff1f<br \/>\n<\/red><br \/>\n\u6709\u975e\u5e38\u591a\u7684\u51fd\u5f0f\u5728\u547c\u53eb\u6bcd\u985e\u5225\u7684\u51fd\u5f0f\uff0c\u53ef\u4ee5\u642d\u914dSymfony API\u6587\u4ef6\u95b1\u8b80\uff1a<br \/>\n<a href=\"http:\/\/api.symfony.com\/2.0\/Symfony\/Component\/HttpFoundation\/Request.html\" title=\"Symfony\\Component\\HttpFoundation\\Request\">Symfony\\Component\\HttpFoundation\\Request<\/a><\/p>\n<pre>\r\n<?php namespace Illuminate\\Http;\r\n\r\nuse SplFileInfo;\r\nuse Symfony\\Component\\HttpFoundation\\ParameterBag;\r\nuse Symfony\\Component\\HttpFoundation\\Request as SymfonyRequest;\r\n\r\nclass Request extends SymfonyRequest {\r\n\r\n\t\/**\r\n\t * The decoded JSON content for the request.\r\n\t *\r\n\t * @var string\r\n\t *\/\r\n\tprotected $json;\r\n\r\n\t\/**\r\n\t * The Illuminate session store implementation.\r\n\t *\r\n\t * @var \\Illuminate\\Session\\Store\r\n\t *\/\r\n\tprotected $sessionStore;\r\n\r\n\t\/**\r\n\t * Return the Request instance.\r\n\t *\r\n\t * @return $this\r\n\t *\/\r\n\tpublic function instance()\r\n\t{\r\n\t\treturn $this;\r\n\t}\r\n<\/pre>\n<p>\u56de\u50b3\u5be6\u9ad4\u672c\u8eab\u3002<br \/>\n\u4e00\u822cOOP\u958b\u767c\u4e0d\u6703\u51fa\u73fe\u9019\u7a2e\u51fd\u5f0f\u3002\u5b83\u662f\u70ba\u4e86Laravel\u7684Facades\u5be6\u4f5c\u800c\u5b58\u5728\u3002<\/p>\n<pre>\r\n\t\/**\r\n\t * Get the request method.\r\n\t *\r\n\t * @return string\r\n\t *\/\r\n\tpublic function method()\r\n\t{\r\n\t\treturn $this->getMethod();\r\n\t}\r\n<\/pre>\n<p>\u53d6\u5f97HTTP Request Verb\u3002<br \/>\ngetMethod\u662f\u7e7c\u627f\u81eaSymfony\u7684Request\u985e\u5225\u3002<br \/>\n<red><br \/>\n\u9019\u662f\u539f\u4f5c\u8005\u5acc\u68c4Symfony\u7684getMethod\u8981\u591a\u62533\u500b\u5b57\u6bcd\u800c\u591a\u5beb\u7684\u51fd\u5f0f\u5427\u3002<br \/>\n\u6211\u89ba\u5f97\u9019\u500b\u51fd\u5f0f\u4e0d\u597d\u3001\u4e0d\u61c9\u8a72\u5b58\u5728\u3002<br \/>\n\u60f3\u60f3\u65e5\u5f8c\u5225\u4eba\u64f4\u5145Laravel\u5143\u4ef6\u6642\uff0cmethod\u8ddfgetMethod\u5230\u8655\u6563\u843d\u7684\u60c5\u666f\u3002<br \/>\n<\/red><\/p>\n<pre>\r\n\t\/**\r\n\t * Get the root URL for the application.\r\n\t *\r\n\t * @return string\r\n\t *\/\r\n\tpublic function root()\r\n\t{\r\n\t\treturn rtrim($this->getSchemeAndHttpHost().$this->getBaseUrl(), '\/');\r\n\t}\r\n<\/pre>\n<p>\u53d6\u5f97\u6839\u7db2\u5740\u3002<br \/>\n\u5b98\u65b9\u6587\u4ef6\u8ddf\u793e\u7fa4\u6703\u544a\u8a34\u4f60\u53d6\u5f97\u6839\u7db2\u5740\u8981\u7528<\/p>\n<pre>\r\nURL::to('\/')\r\n<\/pre>\n<p>\u4f60\u73fe\u5728\u77e5\u9053\u4ee5\u4e0b\u9019\u5169\u500b\u4e5f\u53ef\u4ee5\u4e86\u3002<\/p>\n<pre>\r\nInput::root()\r\nRequest::root()\r\n<\/pre>\n<p>\u7576\u7136\uff0c\u4e0d\u5efa\u8b70\u4f60\u9019\u6a23\u505a\uff0c\u592ahack\u4e86\u3002<\/p>\n<pre>\r\n\r\n\t\/**\r\n\t * Get the URL (no query string) for the request.\r\n\t *\r\n\t * @return string\r\n\t *\/\r\n\tpublic function url()\r\n\t{\r\n\t\treturn rtrim(preg_replace('\/\\?.*\/', '', $this->getUri()), '\/');\r\n\t}\r\n<\/pre>\n<p>\u53d6\u5f97\u6c92\u6709query string\u90e8\u4efd\u7684\u7db2\u5740\u3002<br \/>\n\u540c\u4e0a\u65b9root\u51fd\u5f0f\uff0c\u8b80\u9019\u4efd\u539f\u59cb\u78bc...\u6703\u767c\u73fe\u5f88\u591a\u53d6\u5f97\u7db2\u5740\u7684hack\u7528\u6cd5\u3002<br \/>\n\u4e0d\u904e\u6c92\u6709\u5fc5\u8981\u5c31\u662f\u4e86\u3002<\/p>\n<pre>\r\n\t\/**\r\n\t * Get the full URL for the request.\r\n\t *\r\n\t * @return string\r\n\t *\/\r\n\tpublic function fullUrl()\r\n\t{\r\n\t\t$query = $this->getQueryString();\r\n\r\n\t\treturn $query ? $this->url().'?'.$query : $this->url();\r\n\t}\r\n<\/pre>\n<p>\u53d6\u5f97\u5b8c\u6574url\u3002<br \/>\n\u90a3\u500b\u554f\u865f\u8ddf\u5192\u865f\u7684\u7528\u6cd5\u662fphp\u7684\u4e09\u5143\u904b\u7b97\u5b50\uff0c\u9084\u6c92\u5b78\u904e\u7684\u53ef\u4ee5google\u4e00\u4e0b\u3002<br \/>\n\u95dc\u9375\u5b57\u300cternary operator\u300d<\/p>\n<pre>\r\n\r\n\t\/**\r\n\t * Get the current path info for the request.\r\n\t *\r\n\t * @return string\r\n\t *\/\r\n\tpublic function path()\r\n\t{\r\n\t\t$pattern = trim($this->getPathInfo(), '\/');\r\n\r\n\t\treturn $pattern == '' ? '\/' : $pattern;\r\n\t}\r\n<\/pre>\n<p>\u770b\u8d77\u4f86\u8ddfSymfony\u5143\u4ef6\u672c\u4f86\u7684getPathInfo\u51fd\u5f0f\u5dee\u4e0d\u591a\u3002<br \/>\n\u5dee\u5225\u5728\u65bc\uff0c\u5982\u679c\u7db2\u5740\u6700\u5f8c\u6709\u300c\/\u300d\u6703\u88ab\u79fb\u9664\u5427\u3002<\/p>\n<pre>\r\n\r\n\t\/**\r\n\t * Get the current encoded path info for the request.\r\n\t *\r\n\t * @return string\r\n\t *\/\r\n\tpublic function decodedPath()\r\n\t{\r\n\t\treturn rawurldecode($this->path());\r\n\t}\r\n<\/pre>\n<p>\u5c07\u7db2\u5740\u5957\u7528rawurldecode\u3002<br \/>\n<red><br \/>\n\u5be6\u5728\u6c92\u6709\u5fc5\u8981\u628aPHP\u5167\u5efa\u7684\u51fd\u6578\u518d\u5305\u8d77\u4f86\u4e00\u6b21\u3002<br \/>\n\u5c0dLaravel\u4f7f\u7528\u8005\u4f86\u8aaa\uff0c\u5b78\u7fd2Laravel\u7684\u540c\u6642\u4e5f\u61c9\u8a72\u5b78\u7fd2PHP\uff0c\u4ed6\u61c9\u8a72\u8981\u77e5\u9053PHP\u6709rawurldecode\u9019\u500b\u51fd\u6578\u3002<br \/>\n\u5c0dLaravel\u7684maintainer\u4f86\u8aaa\uff0cdecodedPath\u4e26\u4e0d\u662f\u88ab\u5927\u91cf\u4f7f\u7528\u7684\u51fd\u5f0f(\u6839\u672c\u53ea\u88ab\u547c\u53eb\u4e00\u6b21)\uff0c\u9019\u6a23\u5305\u8d77\u4f86\u4e26\u6c92\u6709\u5c11\u6253\u5e7e\u500b\u5b57\u7684\u6548\u679c\u3002<br \/>\n<\/red><\/p>\n<pre>\r\n\r\n\t\/**\r\n\t * Get a segment from the URI (1 based index).\r\n\t *\r\n\t * @param  string  $index\r\n\t * @param  mixed   $default\r\n\t * @return string\r\n\t *\/\r\n\tpublic function segment($index, $default = null)\r\n\t{\r\n\t\treturn array_get($this->segments(), $index - 1, $default);\r\n\t}\r\n\r\n\t\/**\r\n\t * Get all of the segments for the request path.\r\n\t *\r\n\t * @return array\r\n\t *\/\r\n\tpublic function segments()\r\n\t{\r\n\t\t$segments = explode('\/', $this->path());\r\n\r\n\t\treturn array_values(array_filter($segments, function($v) { return $v != ''; }));\r\n\t}\r\n\r\n\t\/**\r\n\t * Determine if the current request URI matches a pattern.\r\n\t *\r\n\t * @param  mixed  string\r\n\t * @return bool\r\n\t *\/\r\n\tpublic function is()\r\n\t{\r\n\t\tforeach (func_get_args() as $pattern)\r\n\t\t{\r\n\t\t\tif (str_is($pattern, urldecode($this->path())))\r\n\t\t\t{\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t\/**\r\n\t * Determine if the request is the result of an AJAX call.\r\n\t *\r\n\t * @return bool\r\n\t *\/\r\n\tpublic function ajax()\r\n\t{\r\n\t\treturn $this->isXmlHttpRequest();\r\n\t}\r\n\r\n\t\/**\r\n\t * Determine if the request is over HTTPS.\r\n\t *\r\n\t * @return bool\r\n\t *\/\r\n\tpublic function secure()\r\n\t{\r\n\t\treturn $this->isSecure();\r\n\t}\r\n\r\n\t\/**\r\n\t * Returns the client IP address.\r\n\t *\r\n\t * @return string\r\n\t *\/\r\n\tpublic function ip()\r\n\t{\r\n\t\treturn $this->getClientIp();\r\n\t}\r\n\r\n\t\/**\r\n\t * Returns the client IP addresses.\r\n\t *\r\n\t * @return array\r\n\t *\/\r\n\tpublic function ips()\r\n\t{\r\n\t\treturn $this->getClientIps();\r\n\t}\r\n\r\n\t\/**\r\n\t * Determine if the request contains a given input item key.\r\n\t *\r\n\t * @param  string|array  $key\r\n\t * @return bool\r\n\t *\/\r\n\tpublic function exists($key)\r\n\t{\r\n\t\t$keys = is_array($key) ? $key : func_get_args();\r\n\r\n\t\t$input = $this->all();\r\n\r\n\t\tforeach ($keys as $value)\r\n\t\t{\r\n\t\t\tif ( ! array_key_exists($value, $input)) return false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\t\/**\r\n\t * Determine if the request contains a non-empty value for an input item.\r\n\t *\r\n\t * @param  string|array  $key\r\n\t * @return bool\r\n\t *\/\r\n\tpublic function has($key)\r\n\t{\r\n\t\t$keys = is_array($key) ? $key : func_get_args();\r\n\r\n\t\tforeach ($keys as $value)\r\n\t\t{\r\n\t\t\tif ($this->isEmptyString($value)) return false;\r\n\t\t}\r\n\r\n\t\treturn true;\r\n\t}\r\n<\/pre>\n<p>\u5224\u65b7\u53c3\u6578\u662f\u5426\u5b58\u5728\u7684\u51fd\u5f0f\u3002<br \/>\n\u53ef\u4ee5\u5224\u65b7\u55ae\u4e00\u53c3\u6578\u6216\u662f\u9663\u5217\u3002<br \/>\n(\u5b98\u65b9\u6587\u4ef6\u6c92\u63d0\u5230\u53ef\u4ee5\u50b3\u5165\u9663\u5217)<\/p>\n<pre>\r\n\t\/**\r\n\t * Determine if the given input key is an empty string for \"has\".\r\n\t *\r\n\t * @param  string  $key\r\n\t * @return bool\r\n\t *\/\r\n\tprotected function isEmptyString($key)\r\n\t{\r\n\t\t$boolOrArray = is_bool($this->input($key)) || is_array($this->input($key));\r\n\r\n\t\treturn ! $boolOrArray && trim((string) $this->input($key)) === '';\r\n\t}\r\n\r\n\t\/**\r\n\t * Get all of the input and files for the request.\r\n\t *\r\n\t * @return array\r\n\t *\/\r\n\tpublic function all()\r\n\t{\r\n\t\treturn array_replace_recursive($this->input(), $this->files->all());\r\n\t}\r\n\r\n\t\/**\r\n\t * Retrieve an input item from the request.\r\n\t *\r\n\t * @param  string  $key\r\n\t * @param  mixed   $default\r\n\t * @return string\r\n\t *\/\r\n\tpublic function input($key = null, $default = null)\r\n\t{\r\n\t\t$input = $this->getInputSource()->all() + $this->query->all();\r\n\r\n\t\treturn array_get($input, $key, $default);\r\n\t}\r\n\r\n\t\/**\r\n\t * Get a subset of the items from the input data.\r\n\t *\r\n\t * @param  array  $keys\r\n\t * @return array\r\n\t *\/\r\n\tpublic function only($keys)\r\n\t{\r\n\t\t$keys = is_array($keys) ? $keys : func_get_args();\r\n\r\n\t\t$results = [];\r\n\r\n\t\t$input = $this->all();\r\n\r\n\t\tforeach ($keys as $key)\r\n\t\t{\r\n\t\t\tarray_set($results, $key, array_get($input, $key));\r\n\t\t}\r\n\r\n\t\treturn $results;\r\n\t}\r\n\r\n\t\/**\r\n\t * Get all of the input except for a specified array of items.\r\n\t *\r\n\t * @param  array  $keys\r\n\t * @return array\r\n\t *\/\r\n\tpublic function except($keys)\r\n\t{\r\n\t\t$keys = is_array($keys) ? $keys : func_get_args();\r\n\r\n\t\t$results = $this->all();\r\n\r\n\t\tarray_forget($results, $keys);\r\n\r\n\t\treturn $results;\r\n\t}\r\n\r\n\t\/**\r\n\t * Retrieve a query string item from the request.\r\n\t *\r\n\t * @param  string  $key\r\n\t * @param  mixed   $default\r\n\t * @return string\r\n\t *\/\r\n\tpublic function query($key = null, $default = null)\r\n\t{\r\n\t\treturn $this->retrieveItem('query', $key, $default);\r\n\t}\r\n\r\n\t\/**\r\n\t * Determine if a cookie is set on the request.\r\n\t *\r\n\t * @param  string  $key\r\n\t * @return bool\r\n\t *\/\r\n\tpublic function hasCookie($key)\r\n\t{\r\n\t\treturn ! is_null($this->cookie($key));\r\n\t}\r\n\r\n\t\/**\r\n\t * Retrieve a cookie from the request.\r\n\t *\r\n\t * @param  string  $key\r\n\t * @param  mixed   $default\r\n\t * @return string\r\n\t *\/\r\n\tpublic function cookie($key = null, $default = null)\r\n\t{\r\n\t\treturn $this->retrieveItem('cookies', $key, $default);\r\n\t}\r\n\r\n\t\/**\r\n\t * Retrieve a file from the request.\r\n\t *\r\n\t * @param  string  $key\r\n\t * @param  mixed   $default\r\n\t * @return \\Symfony\\Component\\HttpFoundation\\File\\UploadedFile|array\r\n\t *\/\r\n\tpublic function file($key = null, $default = null)\r\n\t{\r\n\t\treturn array_get($this->files->all(), $key, $default);\r\n\t}\r\n\r\n\t\/**\r\n\t * Determine if the uploaded data contains a file.\r\n\t *\r\n\t * @param  string  $key\r\n\t * @return bool\r\n\t *\/\r\n\tpublic function hasFile($key)\r\n\t{\r\n\t\tif ( ! is_array($files = $this->file($key))) $files = array($files);\r\n\r\n\t\tforeach ($files as $file)\r\n\t\t{\r\n\t\t\tif ($this->isValidFile($file)) return true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t\/**\r\n\t * Check that the given file is a valid file instance.\r\n\t *\r\n\t * @param  mixed  $file\r\n\t * @return bool\r\n\t *\/\r\n\tprotected function isValidFile($file)\r\n\t{\r\n\t\treturn $file instanceof SplFileInfo && $file->getPath() != '';\r\n\t}\r\n\r\n\t\/**\r\n\t * Retrieve a header from the request.\r\n\t *\r\n\t * @param  string  $key\r\n\t * @param  mixed   $default\r\n\t * @return string\r\n\t *\/\r\n\tpublic function header($key = null, $default = null)\r\n\t{\r\n\t\treturn $this->retrieveItem('headers', $key, $default);\r\n\t}\r\n\r\n\t\/**\r\n\t * Retrieve a server variable from the request.\r\n\t *\r\n\t * @param  string  $key\r\n\t * @param  mixed   $default\r\n\t * @return string\r\n\t *\/\r\n\tpublic function server($key = null, $default = null)\r\n\t{\r\n\t\treturn $this->retrieveItem('server', $key, $default);\r\n\t}\r\n\r\n\t\/**\r\n\t * Retrieve an old input item.\r\n\t *\r\n\t * @param  string  $key\r\n\t * @param  mixed   $default\r\n\t * @return mixed\r\n\t *\/\r\n\tpublic function old($key = null, $default = null)\r\n\t{\r\n\t\treturn $this->session()->getOldInput($key, $default);\r\n\t}\r\n\r\n\t\/**\r\n\t * Flash the input for the current request to the session.\r\n\t *\r\n\t * @param  string $filter\r\n\t * @param  array  $keys\r\n\t * @return void\r\n\t *\/\r\n\tpublic function flash($filter = null, $keys = array())\r\n\t{\r\n\t\t$flash = ( ! is_null($filter)) ? $this->$filter($keys) : $this->input();\r\n\r\n\t\t$this->session()->flashInput($flash);\r\n\t}\r\n\r\n\t\/**\r\n\t * Flash only some of the input to the session.\r\n\t *\r\n\t * @param  mixed  string\r\n\t * @return void\r\n\t *\/\r\n\tpublic function flashOnly($keys)\r\n\t{\r\n\t\t$keys = is_array($keys) ? $keys : func_get_args();\r\n\r\n\t\treturn $this->flash('only', $keys);\r\n\t}\r\n\r\n\t\/**\r\n\t * Flash only some of the input to the session.\r\n\t *\r\n\t * @param  mixed  string\r\n\t * @return void\r\n\t *\/\r\n\tpublic function flashExcept($keys)\r\n\t{\r\n\t\t$keys = is_array($keys) ? $keys : func_get_args();\r\n\r\n\t\treturn $this->flash('except', $keys);\r\n\t}\r\n\r\n\t\/**\r\n\t * Flush all of the old input from the session.\r\n\t *\r\n\t * @return void\r\n\t *\/\r\n\tpublic function flush()\r\n\t{\r\n\t\t$this->session()->flashInput(array());\r\n\t}\r\n\r\n\t\/**\r\n\t * Retrieve a parameter item from a given source.\r\n\t *\r\n\t * @param  string  $source\r\n\t * @param  string  $key\r\n\t * @param  mixed   $default\r\n\t * @return string\r\n\t *\/\r\n\tprotected function retrieveItem($source, $key, $default)\r\n\t{\r\n\t\tif (is_null($key))\r\n\t\t{\r\n\t\t\treturn $this->$source->all();\r\n\t\t}\r\n\r\n\t\treturn $this->$source->get($key, $default, true);\r\n\t}\r\n\r\n\t\/**\r\n\t * Merge new input into the current request's input array.\r\n\t *\r\n\t * @param  array  $input\r\n\t * @return void\r\n\t *\/\r\n\tpublic function merge(array $input)\r\n\t{\r\n\t\t$this->getInputSource()->add($input);\r\n\t}\r\n\r\n\t\/**\r\n\t * Replace the input for the current request.\r\n\t *\r\n\t * @param  array  $input\r\n\t * @return void\r\n\t *\/\r\n\tpublic function replace(array $input)\r\n\t{\r\n\t\t$this->getInputSource()->replace($input);\r\n\t}\r\n\r\n\t\/**\r\n\t * Get the JSON payload for the request.\r\n\t *\r\n\t * @param  string  $key\r\n\t * @param  mixed   $default\r\n\t * @return mixed\r\n\t *\/\r\n\tpublic function json($key = null, $default = null)\r\n\t{\r\n\t\tif ( ! isset($this->json))\r\n\t\t{\r\n\t\t\t$this->json = new ParameterBag((array) json_decode($this->getContent(), true));\r\n\t\t}\r\n\r\n\t\tif (is_null($key)) return $this->json;\r\n\r\n\t\treturn array_get($this->json->all(), $key, $default);\r\n\t}\r\n\r\n\t\/**\r\n\t * Get the input source for the request.\r\n\t *\r\n\t * @return \\Symfony\\Component\\HttpFoundation\\ParameterBag\r\n\t *\/\r\n\tprotected function getInputSource()\r\n\t{\r\n\t\tif ($this->isJson()) return $this->json();\r\n\r\n\t\treturn $this->getMethod() == 'GET' ? $this->query : $this->request;\r\n\t}\r\n\r\n\t\/**\r\n\t * Determine if the request is sending JSON.\r\n\t *\r\n\t * @return bool\r\n\t *\/\r\n\tpublic function isJson()\r\n\t{\r\n\t\treturn str_contains($this->header('CONTENT_TYPE'), '\/json');\r\n\t}\r\n\r\n\t\/**\r\n\t * Determine if the current request is asking for JSON in return.\r\n\t *\r\n\t * @return bool\r\n\t *\/\r\n\tpublic function wantsJson()\r\n\t{\r\n\t\t$acceptable = $this->getAcceptableContentTypes();\r\n\r\n\t\treturn isset($acceptable[0]) && $acceptable[0] == 'application\/json';\r\n\t}\r\n\r\n\t\/**\r\n\t * Get the data format expected in the response.\r\n\t *\r\n\t * @param  string  $default\r\n\t * @return string\r\n\t *\/\r\n\tpublic function format($default = 'html')\r\n\t{\r\n\t\tforeach ($this->getAcceptableContentTypes() as $type)\r\n\t\t{\r\n\t\t\tif ($format = $this->getFormat($type)) return $format;\r\n\t\t}\r\n\r\n\t\treturn $default;\r\n\t}\r\n\r\n\t\/**\r\n\t * Create an Illuminate request from a Symfony instance.\r\n\t *\r\n\t * @param  \\Symfony\\Component\\HttpFoundation\\Request  $request\r\n\t * @return \\Illuminate\\Http\\Request\r\n\t *\/\r\n\tpublic static function createFromBase(SymfonyRequest $request)\r\n\t{\r\n\t\tif ($request instanceof static) return $request;\r\n\r\n\t\treturn (new static)->duplicate(\r\n\r\n\t\t\t$request->query->all(), $request->request->all(), $request->attributes->all(),\r\n\r\n\t\t\t$request->cookies->all(), $request->files->all(), $request->server->all()\r\n\t\t);\r\n\t}\r\n\r\n\t\/**\r\n\t * Get the session associated with the request.\r\n\t *\r\n\t * @return \\Illuminate\\Session\\Store\r\n\t *\r\n\t * @throws \\RuntimeException\r\n\t *\/\r\n\tpublic function session()\r\n\t{\r\n\t\tif ( ! $this->hasSession())\r\n\t\t{\r\n\t\t\tthrow new \\RuntimeException(\"Session store not set on request.\");\r\n\t\t}\r\n\r\n\t\treturn $this->getSession();\r\n\t}\r\n\r\n}\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u50b3\u9001HTTP REQEUST\u7d66\u4f3a\u670d\u5668\u6642\uff0c\u901a\u5e38\u6703\u5e36\u6709\u53c3\u6578\uff0c\u6b64\u4efd\u6a94\u6848\u4fbf\u662f\u8655\u7406\u9019\u4e9b\u53c3\u6578\u7684\u985e\u5225\u3002 \u5728\u5b98\u65b9\u6587\u4ef6\uff1aRequ &hellip; <a href=\"https:\/\/blog.turn.tw\/?page_id=909\" class=\"more-link\">\u7e7c\u7e8c\u95b1\u8b80 <span class=\"screen-reader-text\">\u63a5\u53d7\u8acb\u6c42\uff1aHttp\/Request.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\/909"}],"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=909"}],"version-history":[{"count":13,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/pages\/909\/revisions"}],"predecessor-version":[{"id":925,"href":"https:\/\/blog.turn.tw\/index.php?rest_route=\/wp\/v2\/pages\/909\/revisions\/925"}],"wp:attachment":[{"href":"https:\/\/blog.turn.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=909"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}