一、系統常量
ThinkPHP為我們准備好的一些常量,在這些常量中已經封裝好了相應的功能和值
系統常量主要用在模塊的動作中,以提高開發效率
注意,系統常量沒必要全記下來,但是一定得知道有這些東西,需要用到的時候可以很方便的查手冊
但是在學習的時候,最好動手敲一遍,輸出看看,熟悉熟悉
代碼如下,可以復制過去自己測試一下
1 echo __ROOT__."<br/>";//網站根目錄,即Apache的htdocs目錄/虛擬主機下的當前項目(Project)目錄 2 echo __APP__."<br/>";//當前應用(Application)入口文件地址 3 echo __URL__."<br/>";//當前模塊地址 4 echo __ACTION__."<br/>";//當前動作地址 5 echo __SELF__."<br/>";//當前RUL地址,即此時瀏覽器地址欄中顯式的URL地址!所謂顯式就是瀏覽器地址欄是啥這個常量就是啥,比如說訪問Index模塊的index動作,模塊名和動作名都是可以省略的,當然也是可以帶上的,那么顯然這兩種情況中瀏覽器地址欄中的URL地址就不一樣了,那么該常量也就是不一樣咯! 6 echo __CURRENT__."<br/>";//當前模塊對應的模板目錄 7 echo ACTION_NAME."<br/>";//當前動作名稱 8 echo APP_PATH."<br/>";//當前應用目錄,注意,是相對於單入口文件的 9 echo APP_NAME."<br/>";//當前應用名稱 10 echo APP_TMPL_PATH."<br/>";//當前應用模板目錄,即皮膚目錄 11 echo APP_PUBLIC_PATH."<br/>";//當前應用公共文件目錄,注意這個輸出是當前應用模板(皮膚)目錄下的Public目錄 12 echo CACHE_PATH."<br/>";//當前應用緩存目錄,即./應用名/Runtime/Cache/,就是編譯后模板目錄 13 echo CONFIG_PATH."<br/>";//當前應用配置文件目錄 14 echo COMMON_PATH."<br/>";//當前應用公共文件目錄(注意,與APP_PUBLIC_PATH不同),即./應用名/Common/ 15 echo DATA_PATH."<br/>";//當前應用數據文件目錄,即./應用名/Runtime/Data/。存放的是與數據庫表結構相關的數據文件,因為ThinkPHP會自動緩存表相關的結構信息 16 echo GROUP_NAME."<br/>";//當前分組名稱 17 echo HTML_PATH."<br/>";//當前應用靜態文件目錄,編譯后模板運行之后生成的靜態文件目錄,./應用名/Html/ 18 echo LANG_SET."<br/>";//瀏覽器語言 19 echo LIB_PATH."<br/>";//當前應用類庫目錄,即./應用名/Lib/ 20 echo LOG_PATH."<br/>";//當前應用日志目錄,即./應用名/Runtime/Logs/ 21 echo LANG_PATH."<br/>";//當前應用語言包目錄,即./應用名/Lang/ 22 echo MODULE_NAME."<br/>";//當前模塊名稱 23 echo MEMORY_LIMIT_ON."<br/>";//是否開啟內存使用限制 24 echo MAGIC_QUOTES_GPC."<br/>";//是否開啟魔術轉義 25 echo TEMP_PATH."<br/>";//當前應用臨時文件目錄,即./應用名/Runtime/Temp/ 26 echo TMPL_PATH."<br/>";//當前應用模板目錄(注意與APP_TMPL_PATH區別開),即./應用名/Tpl/ 27 echo THINK_PATH."<br/>";//系統目錄 28 echo THINK_VERSION."<br/>";//系統版本 29 echo TEMPLATE_NAME."<br/>";//當前應用所用的皮膚名稱,即default 30 echo TEMPLATE_PATH."<br/>";//當前應用模板路徑,即./Index/Tpl/default/。實際上與APP_TMPL_PATH結果一樣 31 echo VENDOR_PATH."<br/>";//第三方類庫目錄,即./ThinkPHP/Vendor/ 32 echo WEB_PUBLIC_PATH."<br/>";//項目(Project)公共文件目錄,注意,與APP_PUBLIC_PATH區別開!雖然兩者都是用來存放JS、CSS、Images等等需要返回給客戶端的文件的,但是在實際開發中,一般都是存放在項目(Project)公共文件目錄中的,原因有兩點,第一、本來一般來說,這些JS、CSS、Images在整個項目(Project)中的各個應用(Application)中都是需要用到的,為啥不放在一起減少冗余呢;第二,便於瀏覽器緩存,因為瀏覽器是通過URL去緩存信息的,如果URL不變,瀏覽器就會從其緩存中取東西,而不是真的向服務器發送請求,而這種機制對於加載JS、CSS、Images等等有益的,可以減少網站流量!
二、模板替換
所謂模板替換,就是對已經編譯過但是還未正式輸出的模板中的一些模板特殊字符串進行替換,相當於Smarty模板的后過濾器!
1、模板替換規則
·默認替換規則
../Public /項目名/應用名/Tpl/Default/Public 該特殊字符通常后面接的是Js或Css或Images目錄,顯然是用於獲取js、css、image的
__URL__ /項目名/入口文件/模塊名 該特殊字符通常后面接一個動作名,用於模板中(模塊內)的跳轉,比如說表單提交、超鏈接等等
__Public__ /項目名/Public 該特殊字符通常后面接的是Js或Css或Images目錄,顯然是用於獲取js、css、image的
__TPML__ /項目名/應用名/Tpl/Default
__APP__ /項目名/入口文件 該特殊字符通常后面接一個模塊(當然包括動作名),用於模板中(模塊間)的跳轉
__ACTION__ /項目名/入口文件/模塊名/動作名 該特殊字符就表示當前訪問的動作的URL
__SELF__ /項目名/入口文件/... 該特殊字符表示瀏覽器地址欄中的完整URL
·自定義替換規則
ThinkPHP支持自定義模板替換規則,但是必須在應用配置文件中進行配置。注意,這些模板替換的特殊字符是嚴格區分大小寫的!配置如下
從以上配置中可以看出,不僅可以增加新的替換規則,還支持修改默認替換規則
2、在MVC模式的系統中,一個值得注意的問題
一切跳轉必須經過控制器(訪問模塊執行動作),絕不可直接訪問(跳轉到)模板!因為如果直接訪問模板,模板中的模板標記是不會被解析的!
舉個例子如下
通過測試發現了兩個問題,第一,用於模板替換的特殊字符再模板中是不需要通過"."與其它字符連接起來的,不要與在模塊中使用的系統常量弄混了呦;第二,在URL中,/think2.1/Index/Tpl/default//Index/top.html也是可以正確訪問的,雖然在default和Index之間有兩個/