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

ThinkPHP 常用路徑常量詳解:__ROOT__、__APP__、__MODULE__、__CONTROLLER__、__ACTION__ 實測對照表

     編輯:PHP 相關知識

ThinkPHP 常用路徑常量詳解:__ROOT__、__APP__、__MODULE__、__CONTROLLER__、__ACTION__ 實測對照表

ThinkPHP 3.2/5.0/5.1/6.0 版本間常量有差異,本文以 **TP 3.2/5.0 典型單入口模式** 為例,在控制器方法中實測輸出,助你快速定位資源路徑、生成 URL。

一、測試代碼

<?php
namespace Home\Controller;
class ApiController extends \Think\Controller {
    public function test() {
        echo '__DIR__: ' . __DIR__ . '<br/>';
        echo '__FILE__: ' . __FILE__ . '<br/>';
        echo '__ROOT__: ' . __ROOT__ . '<br/>';
        echo '__APP__: ' . __APP__ . '<br/>';
        echo '__MODULE__: ' . __MODULE__ . '<br/>';
        echo '__CONTROLLER__: ' . __CONTROLLER__ . '<br/>';
        echo '__ACTION__: ' . __ACTION__ . '<br/>';
        echo '$_SERVER[PHP_SELF]: ' . $_SERVER['PHP_SELF'] . '<br/>';
        echo '$_SERVER[SCRIPT_NAME]: ' . $_SERVER['SCRIPT_NAME'] . '<br/>';
        echo '$_SERVER[SCRIPT_FILENAME]: ' . $_SERVER['SCRIPT_FILENAME'] . '<br/>';
        echo '$_SERVER[REQUEST_URI]: ' . $_SERVER['REQUEST_URI'] . '<br/>';
        echo '$_SERVER[HTTP_HOST]: ' . $_SERVER['HTTP_HOST'] . '<br/>';
        
        // 實際生成圖片 URL 測試
        echo '<img src="' . __ROOT__ . '/Public/banner1.jpg">';
    }
}

二、實測輸出 (假設項目部署在 https://localhost/tpapp/)

常量/變量輸出值說明
__DIR__D:\WWW\tpapp\Application\Home\Controller當前文件所在目錄 (PHP 魔術常量)
__FILE__D:\WWW\tpapp\Application\Home\Controller\ApiController.class.php當前文件完整路徑
__ROOT__/tpapp**項目入口對應的 URL 路徑** (無域名),生成靜態資源 URL 核心
__APP__/tpapp/index.php (或 /tpapp 隱藏 index.php 時)入口文件 URL 路徑
__MODULE__Home當前模塊名
__CONTROLLER__Api當前控制器名 (不含 Controller 後綴)
__ACTION__test當前方法名
$_SERVER['PHP_SELF']/tpapp/index.php/home/api/test當前執行腳本相對文檔根目錄路徑
$_SERVER['SCRIPT_NAME']/tpapp/index.php入口文件路徑
$_SERVER['SCRIPT_FILENAME']D:/WWW/tpapp/index.php入口文件物理路徑
$_SERVER['REQUEST_URI']/tpapp/index.php/home/api/test完整請求 URI (含查詢串)
$_SERVER['HTTP_HOST']localhost請求 Host

三、常見用法速查

<?php
// 1. 模板中引入 CSS/JS/圖片 (推薦 __ROOT__)
<link href="__ROOT__/Public/css/app.css" rel="stylesheet">
<script src="__ROOT__/Public/js/app.js"></script>
<img src="__ROOT__/Public/images/logo.png">

// 2. 生成模塊/控制器/操作 URL (U 函數更推薦)
$url = __ROOT__ . '/' . __MODULE__ . '/' . __CONTROLLER__ . '/' . __ACTION__;
// 等價於
$url = U(__MODULE__ . '/' . __CONTROLLER__ . '/' . __ACTION__);

// 3. 判斷當前模塊/控制器高亮導航
if (__CONTROLLER__ === 'Index') { echo 'class="active"'; }

// 4. 獲取項目物理路徑 (上傳保存、日志寫入)
$uploadDir = __DIR__ . '/../../../Public/Uploads/';
// 或 ThinkPHP 內置
$uploadDir = APP_PATH . '../Public/Uploads/';

四、版本差異提示

版本常量狀態推薦做法
TP 3.2內置 __ROOT__ 等常量直接使用
TP 5.0/5.1**移除** 部分常量,改用 Request::root()、Request::module() 等統一用 Request 門面或助手函數 url()/asset()
TP 6.0完全移除,PSR-7 Request 對象$request->rootUrl()、$request->module()、asset() 助手

五、避坑指南

  • 不要在模板中硬編碼 /tpapp/,部署子目錄變更時全壞,務必用 __ROOT__ 或 {:request.root()}。
  • 開啟 URL_REWRITE 隱藏 index.php 後,__ROOT__ 仍正常指向項目根 URL (如 /tpapp),__APP__ 可能變為 /tpapp。
  • 多入口模式 (如 admin.php、api.php) 下,__ROOT__ 指向當前入口所在目錄,需注意區分。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved