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

ThinkPHP 路徑常量完解:__ROOT__、__APP__、__PUBLIC__ 等實戰用法

     編輯:PHP 相關知識

ThinkPHP 路徑常量完解:__ROOT__、__APP__、__PUBLIC__ 等實戰用法

在 ThinkPHP 模板開發中,正確使用內建路徑常量是實現資源引用靈活、專案遷移無憂的關鍵。本文系統梳理 9 大核心常量的含義、輸出示例及模板替換機制。

場景設定

  • 專案首頁 URL:www.test.com/other/Form
  • 當前模組:Index
  • 當前操作:index
  • 完整入口 URL:https://www.test.com/other/Form/index.php/Index/index

核心常量對照表

常量輸出示例用途說明
__ROOT__/other/thinkphp/mydemo網站根目錄(相對域名)
__SELF__/other/thinkphp/mydemo/Form/index.php當前頁面完整 URL(含入口文件)
__ACTION__/other/thinkphp/mydemo/Form/index.php/Index/index當前操作完整 URL
__URL__/other/thinkphp/mydemo/Form/index.php/Index當前模組地址
__APP__/other/thinkphp/mydemo/Form/index.php當前項目入口地址
__PUBLIC__/other/thinkphp/mydemo/Public網站公共資源目錄(CSS/JS/圖片)
../public/other/thinkphp/mydemo/Form/Tpl/default/Public模板主題公共目錄(不區分大小寫)
APP_PUBLIC_URL/other/thinkphp/mydemo/Form/Tpl/default/Public項目公共模板資源目錄
WEB_PUBLIC_URL/other/thinkphp/mydemo/Public網站級公共資源目錄(同 __PUBLIC__)

模板編譯階段的自動替換機制

ThinkPHP 在模板編譯時,會自動將常量標籤替換為對應的 PHP 常量值,核心邏輯如下:

// 項目公共目錄
$tmplContent = str_ireplace('../public', APP_PUBLIC_URL, $tmplContent);
// 網站公共目錄
$tmplContent = str_replace('__PUBLIC__', WEB_PUBLIC_URL, $tmplContent);
// 網站根目錄
$tmplContent = str_replace('__ROOT__', __ROOT__, $tmplContent);
// 當前項目地址
$tmplContent = str_replace('__APP__', __APP__, $tmplContent);
// 當前模組地址
$tmplContent = str_replace('__URL__', __URL__, $tmplContent);
// 當前操作地址
$tmplContent = str_replace('__ACTION__', __ACTION__, $tmplContent);
// 當前頁面地址
$tmplContent = str_replace('__SELF__', __SELF__, $tmplContent);

實戰最佳實踐

  • 引用 CSS/JS/圖片:統一使用 __PUBLIC__ 或 __ROOT__,避免硬編碼絕對路徑。
  • 表單提交/跳轉:使用 __ACTION__、__URL__、U() 函數動態生成 URL。
  • 模板內部資源:主題目錄下的公共資源用 ../public(模板相對路徑)。
  • 跨專案部署:只需修改入口文件位置或虛擬主機配置,所有常量自動適配,零代碼修改。

常見誤區提醒

  1. 混淆 __PUBLIC__(網站級)與 APP_PUBLIC_URL(項目級/主題級)。
  2. 在 JavaScript 中直接寫死 PHP 常量,導致前後端分離困難——建議透過模板輸出 var ROOT = '__ROOT__'; 供 JS 使用。
  3. 忽略 __SELF__ 包含查詢字串的特性,表單 action="__SELF__" 可保持當前參數不丟失。

熟練掌握這套路徑體系,能讓 ThinkPHP 專案在開發、測試、生產環境間無縫遷移,極大降低維護成本。

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