如果在控制器方法中存在視圖渲染的語句,則加載視圖。
$this->display();
默認(rèn)的控制器是集成 Think\Controller
控制器的。
use Think\Controller;
class IndexController extends Controller {}
查看 Think\Controller
控制器中的 display
方法。
在執(zhí)行display
之前,先執(zhí)行了構(gòu)造函數(shù),實(shí)例化了視圖類(Think\View):
$this->view = Think::instance('Think\View');
然后執(zhí)行display
方法
$this->view->display($templateFile,$charset,$contentType,$content,$prefix);
這個方法中又調(diào)用了Think\View
這個類中的display
方法。在這個方法中,解析并獲取模版內(nèi)容。
$content = $this->fetch($templateFile,$content,$prefix);
查看fetch
方法。這個方法中,先檢測模版文件是否存在,如果不存在則直接拋出異常。如果存在,則定義常量,以保存模版路徑。
if(empty($content)) {
$templateFile = $this->parseTemplate($templateFile);
// 模板文件不存在直接返回
if(!is_file($templateFile))
// 拋出異常
}else{
defined('THEME_PATH')...;
}
接著緩存頁面,將頁面的寫入 PHP 的緩沖區(qū):
ob_start();
ob_implicit_flush(0);
$content = ob_get_clean(); // 獲取并清空緩存