源码阅读-ThinkPHP-6-视图实现

如果在控制器方法中存在视图渲染的语句,则加载视图。

$this->display();

默认的控制器是集成 Think\Controller控制器的。

use Think\Controller;
class IndexController extends Controller {}

查看 Think\Controller控制器中的 display方法。

在执行display之前,先执行了构造函数,实例化了视图类(Think\View):

$this->view     = Think::instance('Think\View');

然后执行display方法

$this->view->display($templateFile,$charset,$contentType,$content,$prefix);

这个方法中又调用了Think\View这个类中的display方法。在这个方法中,解析并获取模版内容。

$content = $this->fetch($templateFile,$content,$prefix);

查看fetch方法。这个方法中,先检测模版文件是否存在,如果不存在则直接抛出异常。如果存在,则定义常量,以保存模版路径。

if(empty($content)) {
    $templateFile   =   $this->parseTemplate($templateFile);
    // 模板文件不存在直接返回
    if(!is_file($templateFile))
        // 抛出异常
}else{
    defined('THEME_PATH')...;
}

接着缓存页面,将页面的写入 PHP 的缓冲区:

ob_start();
ob_implicit_flush(0);
$content = ob_get_clean();      // 获取并清空缓存
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容