mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-07 07:12:47 +08:00
改进Model类的getData和getAttr方法 不存在的属性抛出异常
修正Route类闭包的路由参数获取
This commit is contained in:
@@ -25,6 +25,7 @@ return [
|
|||||||
'module not exists' => '模块不存在',
|
'module not exists' => '模块不存在',
|
||||||
'controller not exists' => '控制器不存在',
|
'controller not exists' => '控制器不存在',
|
||||||
'class not exists' => '类不存在',
|
'class not exists' => '类不存在',
|
||||||
|
'property not exists' => '类的属性不存在',
|
||||||
'template not exists' => '模板文件不存在',
|
'template not exists' => '模板文件不存在',
|
||||||
'illegal controller name' => '非法的控制器名称',
|
'illegal controller name' => '非法的控制器名称',
|
||||||
'illegal action name' => '非法的操作名称',
|
'illegal action name' => '非法的操作名称',
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
namespace think;
|
namespace think;
|
||||||
|
|
||||||
|
use InvalidArgumentException;
|
||||||
use think\Cache;
|
use think\Cache;
|
||||||
use think\Db;
|
use think\Db;
|
||||||
use think\db\Query;
|
use think\db\Query;
|
||||||
@@ -235,6 +236,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $name 字段名 留空获取全部
|
* @param string $name 字段名 留空获取全部
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
* @throws InvalidArgumentException
|
||||||
*/
|
*/
|
||||||
public function getData($name = null)
|
public function getData($name = null)
|
||||||
{
|
{
|
||||||
@@ -243,7 +245,7 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
|||||||
} elseif (array_key_exists($name, $this->data)) {
|
} elseif (array_key_exists($name, $this->data)) {
|
||||||
return $this->data[$name];
|
return $this->data[$name];
|
||||||
} else {
|
} else {
|
||||||
return false;
|
throw new InvalidArgumentException('property not exists:' . __CLASS__ . '->' . $name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -358,25 +360,31 @@ abstract class Model implements \JsonSerializable, \ArrayAccess
|
|||||||
* @access public
|
* @access public
|
||||||
* @param string $name 名称
|
* @param string $name 名称
|
||||||
* @return mixed
|
* @return mixed
|
||||||
|
* @throws InvalidArgumentException
|
||||||
*/
|
*/
|
||||||
public function getAttr($name)
|
public function getAttr($name)
|
||||||
{
|
{
|
||||||
$value = $this->getData($name);
|
try {
|
||||||
|
$value = $this->getData($name);
|
||||||
// 检测属性获取器
|
// 检测属性获取器
|
||||||
$method = 'get' . Loader::parseName($name, 1) . 'Attr';
|
$method = 'get' . Loader::parseName($name, 1) . 'Attr';
|
||||||
if (method_exists($this, $method)) {
|
if (method_exists($this, $method)) {
|
||||||
$value = $this->$method($value, $this->data);
|
$value = $this->$method($value, $this->data);
|
||||||
} elseif (isset($this->type[$name])) {
|
} elseif (isset($this->type[$name])) {
|
||||||
// 类型转换
|
// 类型转换
|
||||||
$value = $this->readTransform($value, $this->type[$name]);
|
$value = $this->readTransform($value, $this->type[$name]);
|
||||||
} elseif (false === $value && method_exists($this, $name)) {
|
}
|
||||||
// 不存在该字段 获取关联数据
|
return $value;
|
||||||
$value = $this->relation()->getRelation($name);
|
} catch (InvalidArgumentException $e) {
|
||||||
// 保存关联对象值
|
if (method_exists($this, $name) && !method_exists('\think\Model', $name)) {
|
||||||
$this->data[$name] = $value;
|
// 不存在该字段 获取关联数据
|
||||||
|
$value = $this->relation()->getRelation($name);
|
||||||
|
// 保存关联对象值
|
||||||
|
$this->data[$name] = $value;
|
||||||
|
} else {
|
||||||
|
throw new InvalidArgumentException('property not exists:' . __CLASS__ . '->' . $name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1004,6 +1004,8 @@ class Route
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($route instanceof \Closure) {
|
if ($route instanceof \Closure) {
|
||||||
|
// 解析路由参数
|
||||||
|
Request::instance()->param(array_merge($match, $_GET));
|
||||||
// 执行闭包
|
// 执行闭包
|
||||||
return ['type' => 'function', 'function' => $route, 'params' => $match];
|
return ['type' => 'function', 'function' => $route, 'params' => $match];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user