改进Request类 增加param has only except方法 去掉 get post delete put方法

This commit is contained in:
thinkphp
2016-05-17 08:25:47 +08:00
parent 9074c8a532
commit f13596e4f6

View File

@@ -56,10 +56,10 @@ class Request
*/ */
protected $dispatch = []; protected $dispatch = [];
protected $get = []; /**
protected $post = []; * @var array 请求参数
protected $put = []; */
protected $delete = []; protected $param = [];
protected $file = []; protected $file = [];
protected $cookie = []; protected $cookie = [];
protected $server = []; protected $server = [];
@@ -154,20 +154,20 @@ class Request
if (!isset($info['path'])) { if (!isset($info['path'])) {
$info['path'] = '/'; $info['path'] = '/';
} }
$options = []; $options = [];
$options[strtolower($method)] = $params; $options['param'] = $params;
$queryString = ''; $queryString = '';
if (isset($info['query'])) { if (isset($info['query'])) {
parse_str(html_entity_decode($info['query']), $query); parse_str(html_entity_decode($info['query']), $query);
if (isset($options['get'])) { if (!empty($options['param'])) {
$options['get'] = array_replace($query, $options['get']); $options['param'] = array_replace($query, $options['param']);
$queryString = http_build_query($query, '', '&'); $queryString = http_build_query($query, '', '&');
} else { } else {
$options['get'] = $query; $options['param'] = $query;
$queryString = $info['query']; $queryString = $info['query'];
} }
} elseif (isset($options['get'])) { } elseif (isset($options['param'])) {
$queryString = http_build_query($options['get'], '', '&'); $queryString = http_build_query($options['param'], '', '&');
} }
$server['REQUEST_URI'] = $info['path'] . ('' !== $queryString ? '?' . $queryString : ''); $server['REQUEST_URI'] = $info['path'] . ('' !== $queryString ? '?' . $queryString : '');
$server['QUERY_STRING'] = $queryString; $server['QUERY_STRING'] = $queryString;
@@ -350,61 +350,92 @@ class Request
*/ */
public function param($name = '') public function param($name = '')
{ {
$method = $this->method(); if (empty($this->param)) {
return $this->$method($name); $method = $this->method();
} // 自动获取请求变量
switch ($method) {
/** case 'POST':
* 当前请求的get参数 $vars = Input::post();
* @access public break;
* @param string $name 变量名 case 'PUT':
* @return mixed $vars = Input::put();
*/ break;
public function get($name = '') case 'DELETE':
{ $vars = Input::delete();
return Input::data($this->get ?: $_GET, $name); break;
} default:
$vars = [];
/** }
* 当前请求的post参数 // 当前请求参数和URL地址中的参数合并
* @access public $this->param = array_merge(Input::get(), $vars);
* @param string $name 变量名 }
* @return mixed if ($name) {
*/ return isset($this->param[$name]) ? $this->param[$name] : null;
public function post($name = '') } else {
{ return $this->param;
return Input::data($this->post ?: $_POST, $name);
}
/**
* 当前请求的put参数
* @access public
* @param string $name 变量名
* @return mixed
*/
public function put($name = '')
{
static $_PUT = null;
if (is_null($_PUT)) {
parse_str(file_get_contents('php://input'), $_PUT);
} }
return Input::data($this->put ?: $_PUT, $name);
} }
/** /**
* 当前请求的delete参数 * 是否存在某个请求参数
* @access public * @access public
* @param string $name 变量名 * @param string $name 变量名
* @param bool $checkEmpty 是否检测空值
* @return mixed * @return mixed
*/ */
public function delete($name = '') public function has($name, $checkEmpty = false)
{ {
static $_DELETE = null; if (empty($this->param)) {
if (is_null($_DELETE)) { $param = $this->param();
parse_str(file_get_contents('php://input'), $_DELETE); } else {
$_DELETE = array_merge($_DELETE, $_GET); $param = $this->param;
} }
return Input::data($this->delete ?: $_DELETE, $name); if (isset($this->param[$name])) {
return ($checkEmpty && '' === $this->param[$name]) ? false : true;
} else {
return false;
}
}
/**
* 获取指定的参数
* @access public
* @param string|array $name 变量名
* @return mixed
*/
public function only($name)
{
if (is_string($name)) {
return $this->param($name);
} else {
foreach ($name as $key) {
$item[$key] = $this->param($name);
}
return $item;
}
}
/**
* 排除指定参数获取
* @access public
* @param string|array $name 变量名
* @return mixed
*/
public function except($name)
{
$param = $this->param();
if (is_string($name)) {
if (isset($param[$name])) {
unset($param[$name]);
}
} else {
foreach ($param as $key => $val) {
if (in_array($key, $name)) {
unset($param[$key]);
}
}
}
return $param;
} }
/** /**