一、系统常量
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之间有两个/