ThinkPHP 遵循約定優於配置,模板路徑自動解析:
模板目錄 / [分組名 /] [主題名 /] 模組名 / 操作名 + 模板後綴
Tpl/,可配置 TMPL_PATHDEFAULT_THEME 指定預設主題,支援多模板切換.html,可配置 TMPL_TEMPLATE_SUFFIXTMPL_FILE_DEPR 控制層級分隔,預設 /,設 _ 可扁平化| 場景 | 對應模板路徑 |
|---|---|
| 預設 (User/add) | Tpl/User/add.html |
| 配置 .tpl 後綴 | Tpl/User/add.tpl |
| 分組 Home + 主題 default | Tpl/Home/default/User/add.html |
| 分隔符 _ | Tpl/Home/User_add.html |
// 格式一:邏輯名稱 (主題:模組:操作)
$this->display('[主題:][模組:]操作'[, '字符編碼'[, '輸出類型']]);
// 格式二:完整檔案路徑 (相對入口檔)
$this->display('./完整/路徑/檔案.tpl'[, '字符編碼'[, '輸出類型']]);
// 1. 無參數:自動定位當前模組/操作對應模板
$this->display();
// 2. 指定同模組下其他操作模板
$this->display('edit'); // 當前模組 edit.html
$this->display('Member:read'); // Member 模組 read.html
// 3. 跨主題調用
$this->display('mobile:User:edit'); // mobile 主題 User/edit.html
// 4. 指定輸出編碼與類型 (如 XML、JSON)
$this->display('rss', 'utf-8', 'application/xml');
// 5. 完整路徑模式 (不受自動定位規則限制)
$this->display('./Public/header.html'); // 相對 index.php
用法同 display(),但返回字串而非輸出:
$content = $this->fetch('Member:edit');
// 後續可對 $content 進行替換、壓縮、加密等後處理
echo $content;
適用於模板內容存資料庫、動態生成、無實體模板檔案場景:
$templateStr = '<h1>{$title}</h1><p>{$content}</p>';
$this->show($templateStr, 'utf-8', 'text/html');
// 內容支援模板標籤解析
$content = '<volist name="list" id="vo">{$vo.name}</volist>';
$this->show($content);
// 單一賦值
$this->assign('name', $value);
// 等效簡寫
$this->name = $value;
// 批量賦值 (陣列)
$data = ['name' => 'thinkphp', 'email' => 'a@b.com', 'phone' => '123'];
$this->assign($data);
注意:必須在 display/show/fetch 前調用;僅輸出已賦值變數,提升安全性。
| 引擎 | 語法 |
|---|---|
| 內建模板引擎 | {$name}、{$user.name}、{$list[0].id} |
| 原生 PHP | <?php echo $name; ?> |
渲染輸出前自動替換特殊字串,簡化模板路徑寫法:
| 標籤 | 替換為 |
|---|---|
__PUBLIC__ | 網站公共目錄 (/Public/) |
__ROOT__ | 網站根路徑 (不含域名) |
__APP__ | 當前項目 URL (不含域名) |
__GROUP__ | 當前分組 URL |
__URL__ | 當前模組 URL |
__ACTION__ | 當前操作 URL |
__SELF__ | 當前頁面完整 URL |
區分大小寫,__PUBLIC__ ≠ __public__。
'TMPL_PARSE_STRING' => [
'__PUBLIC__' => '/Common', // 修改預設
'__JS__' => '/Public/JS/', // 新增 JS 路徑
'__UPLOAD__' => '/Uploads', // 新增上傳路徑
'--PUBLIC--' => '__PUBLIC__', // 反向:需輸出字面 __PUBLIC__ 時用
],
<script src="__JS__/app.js"></script> <img src="__UPLOAD__/avatar.jpg"> <!-- 輸出字面 __PUBLIC__ --> <span>--PUBLIC--</span>
| 方法 | 適用場景 | 輸出方式 |
|---|---|---|
display() | 標準 MVC,有實體模板檔 | 直接輸出 |
fetch() | 需後處理內容 (壓縮、替換、郵件內容) | 返回字串 |
show() | 模板存 DB、動態生成、API 回應模板 | 直接輸出 |
掌握自動定位規則、賦值機制、替換系統,能讓視圖層開發既規範又靈活。