-
為什么會產生這樣的 路徑 常量等 的 困擾?
是由於 在tp中, 使用了多種形式的常量導致的, 比如, 有php語言本身的 "魔術常量", 有 php函數, 比如dirname定義的常量, 還有 define定義的常量等等, 所以 就感到 混淆了. -
魔術常量:
-
魔術常量和tp定義的路徑常量在使用上的區別?
魔術常量本身定義的 路徑, 是不包含 后面的 '/'的;
而tp中使用的路徑常量, 如 ROOT, APP
__DIR__
:
模板調整, 默認的模板替換行為只支持下列替換規則:
'ROOT' => ROOT, // 當前網站地址
'APP' => APP, // 當前應用地址
'MODULE' => MODULE,
'ACTION' => ACTION, // 當前操作地址
'SELF' => SELF, // 當前頁面地址
'CONTROLLER'=> CONTROLLER,
'URL' => CONTROLLER,
'PUBLIC' => ROOT.'/Public',// 站點公共目錄
對於廢除的替換規則你可以在模塊的配置文件中自行添加,例如:
'TMPL_PARSE_STRING'=>array(
'../Public'=> MODULE_PATH.'View/Public/',
'TMPL' => MODULE_PATH.'View/default/'
)
**因此, 你可以看到 實際上沒有 PUBLIC 這個系統常量的, 只有在 模板文件中才能使用 PUBLIC, 而在 php文件中, 如各種Common目錄下的配置文件 config.php中 是不能使用 __PUBLIC__的, 是無效的. **
dirname 就是 獲取完整文件名的 路徑部分. 注意不帶, 最后的斜杠
參考: http://www.cnblogs.com/xianglongsdu/p/5894631.html https://blog.tanteng.me/2014/11/php-line-class-dir/
結果__JS__等幾個變量在模板文件中無法正確解析。原因是__PUBLIC__是模板替換變量,只有出現在模板文件中時才會被替換為對應的字符串。而__ROOT__、__APP__、__MODULE__、__CONTROLLER__、__ACTION__、__SELF__既是模板替換變量,也是系統常量,它們可以應用在模板文件和配置文件中,所以這里可以用__ROOT__
Home/Conf/config.php
<?php
return array(
'TMPL_PARSE_STRING' => array(
'__CSS__' => '__PUBLIC__/Home/css',
'__JS__' => '__PUBLIC__/Home/js',
'__IMG__' => '__PUBLIC__/Home/img',
),
);
結果__JS__等幾個變量在模板文件中無法正確解析。原因是__PUBLIC__是模板替換變量,只有出現在模板文件中時才會被替換為對應的字符串。而__ROOT__、__APP__、__MODULE__、__CONTROLLER__、__ACTION__、__SELF__既是模板替換變量,也是系統常量,它們可以應用在模板文件和配置文件中,所以這里可以用__ROOT__
ROOT、PUBLIC 模板常量在ThinkPHP\Library\Behavior\ContentReplaceBehavior.class.php 文件中定義