为什么会产生这样的 路径 常量等 的 困扰?
是由于 在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
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 文件中定义