修复thinkphp 3.2模版变量中和在标签中使用Think模版变量cookie\session解析结果为空的bug:
修改ThinkPHP\Library\Think\Template.class.php 605行
//以下代码中有 当设置了session cookies前缀的情况下 模版变量应用会失效 需修改为下面代码
// case 'COOKIE':
// if(isset($vars[3])) {
// $parseStr = '$_COOKIE[\''.$vars[2].'\'][\''.$vars[3].'\']';
// }else{
// $parseStr = 'cookie(\''.$vars[2].'\')';
// }
// break;
// case 'SESSION':
// if(isset($vars[3])) {
// $parseStr = '$_SESSION[\''.$vars[2].'\'][\''.$vars[3].'\']';
// }else{
// $parseStr = 'session(\''.$vars[2].'\')';
// }
// break;
case 'COOKIE':
if(isset($vars[3])) {
$prefix=C('COOKIE_PREFIX');
$prefixStr = empty($prefix) ? '' : "['".$prefix."']";
$parseStr = '$_COOKIE'.$prefixStr.'[\''.$vars[2].'\'][\''.$vars[3].'\']';
}else{
$parseStr = 'cookie(\''.$vars[2].'\')';
}
break;
case 'SESSION':
if(isset($vars[3])) {
$prefix = C('SESSION_PREFIX');
$prefixStr = empty($prefix) ? '' : "['".$prefix."']";
$parseStr = '$_SESSION'.$prefixStr.'[\''.$vars[2].'\'][\''.$vars[3].'\']';
}else{
$parseStr = 'session(\''.$vars[2].'\')';
}
break;
修改ThinkPHP\Library\Think\Template\TagLib.class.php parseThinkVar函数 206行为如下代码:
case 'COOKIE':
if(isset($vars[3])) {
$prefix=C('COOKIE_PREFIX');
$prefixStr = empty($prefix) ? '' : "['".$prefix."']";
$parseStr = '$_COOKIE'.$prefixStr.'[\''.$vars[2].'\'][\''.$vars[3].'\']';
}else{
$parseStr = 'cookie(\''.$vars[2].'\')';
}
break;
case 'SESSION':
if(isset($vars[3])) {
$prefix = C('SESSION_PREFIX');
$prefixStr = empty($prefix) ? '' : "['".$prefix."']";
$parseStr = '$_SESSION'.$prefixStr.'[\''.$vars[2].'\'][\''.$vars[3].'\']';
}else{
$parseStr = 'session(\''.$vars[2].'\')';
}
break;
本文解决ThinkPHP3.2框架中模板变量在使用Cookie和Session时解析为空的问题,通过修改Template.class.php和TagLib.class.php文件中的特定行代码实现。

381

被折叠的 条评论
为什么被折叠?



