如果在控制器方法中存在视图渲染的语句,则加载视图。
$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(); // 获取并清空缓存