首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

ThinkPHP 3.x 視圖渲染詳解:display、show、fetch 與模板替換機制

     編輯:PHP 綜合知識

模板檔案定義規則

ThinkPHP 遵循約定優於配置,模板路徑自動解析:

模板目錄 / [分組名 /] [主題名 /] 模組名 / 操作名 + 模板後綴
  • 模板目錄:預設 Tpl/,可配置 TMPL_PATH
  • 分組:啟用分組時自動加入分組名子目錄
  • 主題:DEFAULT_THEME 指定預設主題,支援多模板切換
  • 後綴:預設 .html,可配置 TMPL_TEMPLATE_SUFFIX
  • 分隔符:TMPL_FILE_DEPR 控制層級分隔,預設 /,設 _ 可扁平化

範例

場景對應模板路徑
預設 (User/add)Tpl/User/add.html
配置 .tpl 後綴Tpl/User/add.tpl
分組 Home + 主題 defaultTpl/Home/default/User/add.html
分隔符 _Tpl/Home/User_add.html

一、display() —— 最常用渲染輸出

調用格式

// 格式一:邏輯名稱 (主題:模組:操作)
$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

二、fetch() —— 獲取渲染內容不直接輸出

用法同 display(),但返回字串而非輸出:

$content = $this->fetch('Member:edit');
// 後續可對 $content 進行替換、壓縮、加密等後處理
echo $content;

三、show() —— 直接渲染字串內容

適用於模板內容存資料庫、動態生成、無實體模板檔案場景:

$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);

四、模板變量賦值 (assign)

// 單一賦值
$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; ?>

六、模板替換機制 (TMPL_PARSE_STRING)

渲染輸出前自動替換特殊字串,簡化模板路徑寫法:

內建替換規則

標籤替換為
__PUBLIC__網站公共目錄 (/Public/)
__ROOT__網站根路徑 (不含域名)
__APP__當前項目 URL (不含域名)
__GROUP__當前分組 URL
__URL__當前模組 URL
__ACTION__當前操作 URL
__SELF__當前頁面完整 URL

區分大小寫,__PUBLIC__ ≠ __public__。

自訂替換規則 (config.php)

'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 回應模板直接輸出

掌握自動定位規則、賦值機制、替換系統,能讓視圖層開發既規範又靈活。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved