ThinkPHP环境下JS文件按模块部署

0、序言

一般来说,ThinkPHP的JS文件目录不是太友好;但允许修改参数确定JS的存放路径。

按照ThinkPHP的目录规范,JS文件一般视同静态资源处理,这样JS文件和视图htm文件将部署在两个完全不同的目录,即使二者属于同一应用、模块。通过Thinkphp提供的模板替换功能,配置模块的JS路径参数,可以将JS文件和普通视图文件都放在同一目录,例如Application/Module/View/目录下,这样在按应用、模块部署将变得更加便捷;两种文件所在位置比较接近,开发过程也相对比较方便(个人习惯)。

1、ThinkPHP的目录结构

ThinkPHP的官方推荐标准,JS文件与静态资源一同放在/Public/目录下。

按ThinkPHP的推荐目录结构,应用程序放在Apps目录下,这个目录包括php和htm文件,静态资源放在Public目录下。这样的处理方式有利于将静态文件分开,在较大访问量时容易采取各种优化措施。ThinkPHP部署目录结构如下所示。

www  WEB部署目录(或者子目录)
├─index.php       入口文件
├─README.md       README文件
├─Application     应用目录
├─Public          资源文件目录
└─ThinkPHP        框架目录

在ThinkPHP的模块中,MVC各部分都有专用的目录,如下所示,视图部分htm文件存放在View目录,但与htm文件密切相关的JS文件不能直接存放在View目录,否则htm不能正常引用js脚本。

├─Module         模块目录
│  ├─Conf        配置文件目录
│  ├─Common      公共函数目录
│  ├─Controller  控制器目录
│  ├─Model       模型目录
│  ├─Logic       逻辑目录(可选)
│  ├─Service     Service目录(可选)
│  ... 更多分层目录可选
│  └─View        视图目录

ThinkPHP的官方案例中,JS脚本存放在/Public/目录,htm文件中引用时用“PUBLIC/”加上js文件的路径即可正常引用。
如此处理有2个小问题:
Htm文件与js文件处于路径完全不同的目录,开发人员个人感觉不佳,如本人;
按模块或应用发布软件时,除开apps/module/目录,在Public/目录下也有文件,操作不便。

2、ThinkPHP的模板替换

ThinkPHP的JS目录是由配置参数确定的。

ThinkPHP在进行模板渲染之前,还会对模板内容进行一些特殊字符串替换操作,也就是实现模板输出的替换和过滤。替换的内容就包括前文提到的“PUBLIC”,Public/目录下js文件的引用也是因为这个替换机制的存在才会正常工作。
替换的内容可以在配置文件中添加TMPL_PARSE_STRING配置项即可,例如修改默认的替换规则,如下所示。

‘TMPL_PARSE_STRING‘  =>array(
     ‘__PUBLIC__‘ => ‘/Common‘, // 更改默认的/Public 替换规则
     ‘__JS__‘     => ‘/Public/JS/‘, // 增加新的JS类库路径替换规则
     ‘__UPLOAD__‘ => ‘/Uploads‘, // 增加新的上传路径替换规则
)

因TMPL_PARSE_STRING是数组类型参数,所以可以根据需要添加需要的替换规则。
ThinkPHP允许多种层次的配置方式,惯例配置文件在ThinkPHP/Conf/convention.php,对全部应用有效;应用配置在Application/Common/Conf/config.php,对本应用有效;模块配置在Application/当前模块名/Conf/config.php,对当前模块有效。

3、按需要确定JS路径

可以修改配置参数,将JS文件放在喜欢的目录下。

综前文所述:ThinkPHP环境下JS文件一般存放在/Public/目录,这是由TMPL_PARSE_STRING配置项的默认参数确定的,对应用、模块两个层次而言,都可以修改JS文件存放的配置参数。
为改变JS文件的存放路径,需修改TMPL_PARSE_STRING配置。以模块为例,确定将JS文件存放于/View/JS/目录,处理方式如下:
1)修改Module/Conf/config.php,增加常量“JS”,添加代码

‘TMPL_PARSE_STRING‘ => array(‘__JS__‘=>__ROOT__.‘/Apps/Module/View/JS‘)

2)JS文件存放于/JS/目录,视图中引用如下所示:

<script src="__JS__/index.js"></script>

注:为避免冲突,一般不重复定义默认存在的常量,如“PUBLIC”。
倘若要按应用管理JS文件,修改应用配置即可;在应用访问提升后,考虑移动JS文件到/Public/目录时,也只需直接移动JS文件,然后修改配置选项与“PUBLIC”一致。

4、总结

ThinkPHP推荐将JS文件视同静态资源文件存放在/Public/目录下,利于大规模应用进行性能优化,但小规模应用采用应用、模块部署时存在不便。修改ThinkPHP的模版替换参数TMPL_PARSE_STRING,可以按模块、应用确定JS的存放路径。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。