framework
framework copied to clipboard
Session 未初始化时使用 Request::has() 会报错
Request::has('name', 'session')
只是检测指定 Session 是否存在,如果得初始化 Session 之后才能使用的话,感觉不大友好。
相当于使用Request::has('name', 'session')
前就得判断下Session
,或者使用Session::has('name')
来判断,这时候Request::has()
方法就失去了它的便利性和统一化。
希望能优化下这块,如果没初始化Session则直接返回false
即可,而不是直接报错。
错误流程跟踪
未初始化Session,所以$this->session
为null
,转为调用$this->session()
/**
* 是否存在某个请求参数
* @access public
* @param string $name 变量名
* @param string $type 变量类型
* @param bool $checkEmpty 是否检测空值
* @return bool
*/
public function has(string $name, string $type = 'param', bool $checkEmpty = false): bool
{
if (!in_array($type, ['param', 'get', 'post', 'put', 'patch', 'route', 'delete', 'cookie', 'session', 'env', 'request', 'server', 'header', 'file'])) {
return false;
}
$param = empty($this->$type) ? $this->$type() : $this->$type;
if (is_object($param)) {
return $param->has($name);
}
// 按.拆分成多维数组进行判断
foreach (explode('.', $name) as $val) {
if (isset($param[$val])) {
$param = $param[$val];
} else {
return false;
}
}
return ($checkEmpty && '' === $param) ? false : true;
}
直接返回$this->session->all()
的结果,但未初始化Session,所以$this->session
为null
,报Call to a member function all() on null
错误
/**
* 获取session数据
* @access public
* @param string $name 数据名称
* @param string $default 默认值
* @return mixed
*/
public function session(string $name = '', $default = null)
{
if ('' === $name) {
return $this->session->all();
}
return $this->session->get($name, $default);
}
本来想直接改成这样提交PR,但显然是不优雅的
/**
* 获取session数据
* @access public
* @param string $name 数据名称
* @param string $default 默认值
* @return mixed
*/
public function session(string $name = '', $default = null)
{
if ('' === $name) {
return null === $this->session ? [] : $this->session->all();
}
return null === $this->session ? $default : $this->session->get($name, $default);
}
还想着不初始化也withSession()
一个空的Session
,但又觉得会不会增加不必要的流程和内存占用。