搜索
系统检测到您的用户名不符合规范:

关于thinkphp5模板的一些问题

浏览:671 发布日期:2019年04月26日 分类:ThinkPHP5专区 关键字: 模板 解析
刚接触tp5,今天打算把之前基于tp3搭建的框架移植到tp5上,结果遇到很多问题,想问问大家是怎么解决的。
1、模板编译后缓存。
前期开发调试总是不会及时更新修改,参照网上的方法改了template,让框架根据配置来灵活判断是否生成缓存。
end.这方法毕竟不是框架的,不知道是不是长久之计,想问问tp5这方面是怎么解决的。
2、被继承的模板 {include file="t1" /} ,t1中的{block}不会被解析。
这是tp3的include解析:protected function parseInclude($content, $extend = true) {
// 解析继承
if($extend)
$content = $this->parseExtend($content);
......
}
这是tp5的include解析:private function parseInclude(&$content)
{
$regex = $this->getRegex('include');
$func = function ($template) use (&$func, &$regex, &$content) {
if (preg_match_all($regex, $template, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$array = $this->parseAttr($match[0]);
$file = $array['file'];
unset($array['file']);
// 分析模板文件名并读取内容
$parseStr = $this->parseTemplateName($file);
foreach ($array as $k => $v) {
// 以$开头字符串转换成模板变量
if (0 === strpos($v, '$')) {
$v = $this->get(substr($v, 1));
}
$parseStr = str_replace('[' . $k . ']', $v, $parseStr);
}
$content = str_replace($match[0], $parseStr, $content);
// 再次对包含文件进行模板分析
$func($parseStr);
}
unset($matches);
}
};
// 替换模板中的include标签
$func($content);
return;
}
可以看到tp5这里是没有对include的内容进行block的解析的。
不知道是不是tp5有意而为之,但是这样在功能上就有限制了。

关于这个问题在函数中加入$this->parseExtend($content);就可以解决。private function parseInclude(&$content)
{
............
// 再次对包含文件进行模板分析
$this->parseExtend($content);
$func($parseStr);
............
}
但是我觉得tp5做了这么久了,应该不会没有注意到这个问题,同样的,是特意这样做的吗?
或者还想问问大家,是不是tp5在这个问题上有其他解决办法呢?
最佳答案
评论() 相关
收藏
993‮TM
积分:380 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /