改进模板引擎的Think变量解析

This commit is contained in:
thinkphp
2016-10-10 12:17:48 +08:00
parent 0b8327d135
commit cbfd825311

View File

@@ -959,78 +959,66 @@ class Template
* @param array $vars 变量数组 * @param array $vars 变量数组
* @return string * @return string
*/ */
public function parseThinkVar(&$vars) public function parseThinkVar($vars)
{ {
$vars[0] = strtoupper(trim($vars[0])); $type = strtoupper(trim(array_shift($vars)));
$parseStr = ''; $param = implode('.', $vars);
if (count($vars) >= 2) { if ($vars) {
$vars[1] = trim($vars[1]); switch ($type) {
switch ($vars[0]) {
case 'SERVER': case 'SERVER':
$parseStr = '$_SERVER[\'' . strtoupper($vars[1]) . '\']'; $parseStr = '\\think\\Request::instance()->server(\'' . $param . '\')';
break; break;
case 'GET': case 'GET':
$parseStr = '$_GET[\'' . $vars[1] . '\']'; $parseStr = '\\think\\Request::instance()->get(\'' . $param . '\')';
break; break;
case 'POST': case 'POST':
$parseStr = '$_POST[\'' . $vars[1] . '\']'; $parseStr = '\\think\\Request::instance()->post(\'' . $param . '\')';
break; break;
case 'COOKIE': case 'COOKIE':
if (isset($vars[2])) { $parseStr = '\\think\\Cookie::get(\'' . $param . '\')';
$parseStr = '\\think\\Cookie::get(\'' . $vars[1] . '.' . $vars[2] . '\')';
} else {
$parseStr = '\\think\\Cookie::get(\'' . $vars[1] . '\')';
}
break; break;
case 'SESSION': case 'SESSION':
if (isset($vars[2])) { $parseStr = '\\think\\Session::get(\'' . $param . '\')';
$parseStr = '\\think\\Session::get(\'' . $vars[1] . '.' . $vars[2] . '\')';
} else {
$parseStr = '\\think\\Session::get(\'' . $vars[1] . '\')';
}
break; break;
case 'ENV': case 'ENV':
$parseStr = '$_ENV[\'' . strtoupper($vars[1]) . '\']'; $parseStr = '\\think\\Request::instance()->env(\'' . $param . '\')';
break; break;
case 'REQUEST': case 'REQUEST':
$parseStr = '$_REQUEST[\'' . $vars[1] . '\']'; $parseStr = '\\think\\Request::instance()->request(\'' . $param . '\')';
break; break;
case 'CONST': case 'CONST':
$parseStr = strtoupper($vars[1]); $parseStr = strtoupper($param);
break; break;
case 'LANG': case 'LANG':
$parseStr = '\\think\\Lang::get(\'' . $vars[1] . '\')'; $parseStr = '\\think\\Lang::get(\'' . $param . '\')';
break; break;
case 'CONFIG': case 'CONFIG':
if (isset($vars[2])) { $parseStr = '\\think\\Config::get(\'' . $param . '\')';
$vars[1] .= '.' . $vars[2];
}
$parseStr = '\\think\\Config::get(\'' . $vars[1] . '\')';
break; break;
default: default:
$parseStr = '\'\''; $parseStr = '\'\'';
break; break;
} }
} else { } else {
if (count($vars) == 1) { switch ($type) {
switch ($vars[0]) { case 'NOW':
case 'NOW': $parseStr = "date('Y-m-d g:i a',time())";
$parseStr = "date('Y-m-d g:i a',time())"; break;
break; case 'VERSION':
case 'VERSION': $parseStr = 'THINK_VERSION';
$parseStr = 'THINK_VERSION'; break;
break; case 'LDELIM':
case 'LDELIM': $parseStr = '\'' . ltrim($this->config['tpl_begin'], '\\') . '\'';
$parseStr = '\'' . ltrim($this->config['tpl_begin'], '\\') . '\''; break;
break; case 'RDELIM':
case 'RDELIM': $parseStr = '\'' . ltrim($this->config['tpl_end'], '\\') . '\'';
$parseStr = '\'' . ltrim($this->config['tpl_end'], '\\') . '\''; break;
break; default:
default: if (defined($type)) {
if (defined($vars[0])) { $parseStr = $type;
$parseStr = $vars[0]; } else {
} $parseStr = '';
} }
} }
} }
return $parseStr; return $parseStr;