diff --git a/library/think/Model.php b/library/think/Model.php index b9b55c44..a96c7d6e 100644 --- a/library/think/Model.php +++ b/library/think/Model.php @@ -1144,8 +1144,9 @@ abstract class Model implements \JsonSerializable, \ArrayAccess ->join($table . ' b', 'a.' . $info['localKey'] . '=b.' . $info['foreignKey'], $info['joinType']) ->group('b.' . $info['foreignKey']) ->having('count(' . $id . ')' . $operator . $count); - case Relation::HAS_MANY_THROUGH: - // TODO + case Relation::HAS_MANY_THROUGH: // TODO + default: + return $model; } } @@ -1176,8 +1177,9 @@ abstract class Model implements \JsonSerializable, \ArrayAccess ->field('a.*') ->join($table . ' b', 'a.' . $info['localKey'] . '=b.' . $info['foreignKey'], $info['joinType']) ->where($where); - case Relation::HAS_MANY_THROUGH: - // TODO + case Relation::HAS_MANY_THROUGH: // TODO + default: + return $model; } } diff --git a/library/think/Route.php b/library/think/Route.php index 572e82b7..8f7dbe76 100644 --- a/library/think/Route.php +++ b/library/think/Route.php @@ -305,7 +305,8 @@ class Route } $vars = self::parseVar($rule); if (isset($name)) { - self::name($name, [$rule, $vars, self::$domain]); + $key = $group ? $group . '/' . $rule : $rule; + self::name($name, [$key, $vars, self::$domain]); } if ($group) { if ('*' != $type) { @@ -425,7 +426,7 @@ class Route $vars = self::parseVar($key); $item[] = ['rule' => $key, 'route' => $route, 'var' => $vars, 'option' => $options, 'pattern' => $patterns]; // 设置路由标识 - self::name($route, [$key, $vars, self::$domain]); + self::name($route, [$name . '/' . $key, $vars, self::$domain]); } self::$rules['*'][$name] = ['rule' => $item, 'route' => '', 'var' => [], 'option' => $option, 'pattern' => $pattern]; } diff --git a/library/think/Template.php b/library/think/Template.php index 036b367e..0c2265c0 100644 --- a/library/think/Template.php +++ b/library/think/Template.php @@ -959,78 +959,66 @@ class Template * @param array $vars 变量数组 * @return string */ - public function parseThinkVar(&$vars) + public function parseThinkVar($vars) { - $vars[0] = strtoupper(trim($vars[0])); - $parseStr = ''; - if (count($vars) >= 2) { - $vars[1] = trim($vars[1]); - switch ($vars[0]) { + $type = strtoupper(trim(array_shift($vars))); + $param = implode('.', $vars); + if ($vars) { + switch ($type) { case 'SERVER': - $parseStr = '$_SERVER[\'' . strtoupper($vars[1]) . '\']'; + $parseStr = '\\think\\Request::instance()->server(\'' . $param . '\')'; break; case 'GET': - $parseStr = '$_GET[\'' . $vars[1] . '\']'; + $parseStr = '\\think\\Request::instance()->get(\'' . $param . '\')'; break; case 'POST': - $parseStr = '$_POST[\'' . $vars[1] . '\']'; + $parseStr = '\\think\\Request::instance()->post(\'' . $param . '\')'; break; case 'COOKIE': - if (isset($vars[2])) { - $parseStr = '\\think\\Cookie::get(\'' . $vars[1] . '.' . $vars[2] . '\')'; - } else { - $parseStr = '\\think\\Cookie::get(\'' . $vars[1] . '\')'; - } + $parseStr = '\\think\\Cookie::get(\'' . $param . '\')'; break; case 'SESSION': - if (isset($vars[2])) { - $parseStr = '\\think\\Session::get(\'' . $vars[1] . '.' . $vars[2] . '\')'; - } else { - $parseStr = '\\think\\Session::get(\'' . $vars[1] . '\')'; - } + $parseStr = '\\think\\Session::get(\'' . $param . '\')'; break; case 'ENV': - $parseStr = '$_ENV[\'' . strtoupper($vars[1]) . '\']'; + $parseStr = '\\think\\Request::instance()->env(\'' . $param . '\')'; break; case 'REQUEST': - $parseStr = '$_REQUEST[\'' . $vars[1] . '\']'; + $parseStr = '\\think\\Request::instance()->request(\'' . $param . '\')'; break; case 'CONST': - $parseStr = strtoupper($vars[1]); + $parseStr = strtoupper($param); break; case 'LANG': - $parseStr = '\\think\\Lang::get(\'' . $vars[1] . '\')'; + $parseStr = '\\think\\Lang::get(\'' . $param . '\')'; break; case 'CONFIG': - if (isset($vars[2])) { - $vars[1] .= '.' . $vars[2]; - } - $parseStr = '\\think\\Config::get(\'' . $vars[1] . '\')'; + $parseStr = '\\think\\Config::get(\'' . $param . '\')'; break; default: $parseStr = '\'\''; break; } } else { - if (count($vars) == 1) { - switch ($vars[0]) { - case 'NOW': - $parseStr = "date('Y-m-d g:i a',time())"; - break; - case 'VERSION': - $parseStr = 'THINK_VERSION'; - break; - case 'LDELIM': - $parseStr = '\'' . ltrim($this->config['tpl_begin'], '\\') . '\''; - break; - case 'RDELIM': - $parseStr = '\'' . ltrim($this->config['tpl_end'], '\\') . '\''; - break; - default: - if (defined($vars[0])) { - $parseStr = $vars[0]; - } - } + switch ($type) { + case 'NOW': + $parseStr = "date('Y-m-d g:i a',time())"; + break; + case 'VERSION': + $parseStr = 'THINK_VERSION'; + break; + case 'LDELIM': + $parseStr = '\'' . ltrim($this->config['tpl_begin'], '\\') . '\''; + break; + case 'RDELIM': + $parseStr = '\'' . ltrim($this->config['tpl_end'], '\\') . '\''; + break; + default: + if (defined($type)) { + $parseStr = $type; + } else { + $parseStr = ''; + } } } return $parseStr; diff --git a/library/think/db/Query.php b/library/think/db/Query.php index 0ba4b3c7..5c3e0f0e 100644 --- a/library/think/db/Query.php +++ b/library/think/db/Query.php @@ -377,7 +377,7 @@ class Query */ public function value($field, $default = null) { - $result = null; + $result = false; if (!empty($this->options['cache'])) { // 判断查询缓存 $cache = $this->options['cache']; @@ -387,7 +387,7 @@ class Query $key = is_string($cache['key']) ? $cache['key'] : md5($field . serialize($this->options)); $result = Cache::get($key); } - if (!$result) { + if (false === $result) { if (isset($this->options['field'])) { unset($this->options['field']); } @@ -409,7 +409,7 @@ class Query // 清空查询条件 $this->options = []; } - return !is_null($result) ? $result : $default; + return false !== $result ? $result : $default; } /** @@ -431,7 +431,7 @@ class Query $guid = is_string($cache['key']) ? $cache['key'] : md5($field . serialize($this->options)); $result = Cache::get($guid); } - if (!$result) { + if (false === $result) { if (isset($this->options['field'])) { unset($this->options['field']); } @@ -667,19 +667,17 @@ class Query if (is_array($join)) { if (0 !== $key = key($join)) { // 设置了键名则键名为表名,键值作为表的别名 - $table = $key; - $alias = array_shift($join); - $this->alias([$table => $alias]); - $table = [$table => $alias]; + $table = [$key => array_shift($join)]; + $this->alias($table); } else { $table = array_shift($join); } } else { $table = trim($join); - if (strpos($table, ' ')) { + if (strpos($table, ' ') && !strpos($table, ')')) { list($table, $alias) = explode(' ', $table); - $this->alias([$table => $alias]); - $table = [$table => $alias]; + $table = [$table => $alias]; + $this->alias($table); } } $this->options['join'][] = [$table, strtoupper($type), $condition]; diff --git a/tests/thinkphp/library/think/templateTest.php b/tests/thinkphp/library/think/templateTest.php index 29100f4d..49c0eb39 100644 --- a/tests/thinkphp/library/think/templateTest.php +++ b/tests/thinkphp/library/think/templateTest.php @@ -291,15 +291,15 @@ EOF; {\$Think.SITE.URL} EOF; $data = <<
-
-
+server('SERVER_NAME'); ?>
+get('action'); ?>
+post('action'); ?>




-
-
+env('OS'); ?>
+request('action'); ?>