关于thinkphp5模板的一些问题

浏览:591 发布日期: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在这个问题上有其他解决办法呢?
最佳答案
评论( 相关
后面还有条评论,点击查看>>