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的存放路径。

时间: 2024-08-03 23:03:36

ThinkPHP环境下JS文件按模块部署的相关文章

ThinkPHP环境下调用Action的测试工具

0.序言 > 本人开发了一种工具帮助ThinkPHP开发者模拟前端ajax请求,以提高测试效率. 前.后端开发者分工合作是Web项目常见的开发方式.在二者开发进度不一致的情况下,后端开发者经常面临无法通过前端界面验证程序的尴尬:此时往往只能采取模拟请求的方式进行测试,而在ThinkPHP环境下模拟请求会更加麻烦一些.基于过往项目的积累,本人开发一个测试工具帮助开发者模拟HTTP请求调用后端Action服务.本文介绍工具的功能和获取.使用方法,并说明实现过程的一些关键点. 1.功能 基于提高测试效

windows环境下音频文件播放

最近一个小项目要用到音乐播放模块,于是翻了一下资料,发现windows环境下播放音频文件有MCI.DirectShow等几种方式,当然也可以使用底层的api WaveOut播放.其中第一种方式最为简单,程序仅需通过发送MCI命令即可控制媒体设备,实现音频文件播放.暂停.停止等操作.其他两种方式就比较繁琐了,首先搭建DirectShow开发环境就比较周折,而使用WaveOut播放音频,需要先解码音频以获取pcm数据,然后才能播放.对于不涉及音频数据处理.仅需播放音频的简单使用场景,推荐使用MCI方

SpringCloud从入门到进阶(四)——生产环境下Eureka的完全分布式部署

内容 由于前两节的内容我们知道,开启了preferIpAddress后,Eureka的伪分布式部署会提示replica不可用.这一节我们讲解如何在生产环境下部署完全分布式的Eureka集群,确保开启了preferIpAddress后replica的可用性. 版本 IDE:IDEA 2017.2.2 x64 JDK:1.8.0_171 manve:3.3.3 SpringBoot:1.5.9.RELEASE SpringCloud:Dalston.SR1 适合人群 Java开发人员 节点信息: 节

CentOS7.X环境下源码包安装部署RabbitMQ3.7.17

本文介绍在CentOS7.X环境下源码包安装部署RabbitMQ3.7.17,使用docker安装很简单,这里我就不往文章中添加.在CentOS7.X环境下使用源码包安装还是有遇到不少坑的(使用yum安装的方式官方网站有介绍,比较简单),通过这篇我的个人实践操作,能够帮助到有需要的人.搭建环境:操作系统:CentOS7.5内存大小:16GB硬盘:100G注:正文中的参数与部署路径等,请根据实际需求修改.1.软件准备:wxWidgets-3.1.2.tar.bz2otp_src_22.0.tar.

RAC 环境下参数文件(spfile)管理

RAC环境下,初始化参数文件与但实例下参数文件有些异同,主要表现在初始化参数可以为多个实例公用,也可以单独设置各个实例的初始化参数.对于那些非共用的初始化参数则必须要单独设置,而共用的则可以单独设置,但一般不建议这么用.本文描述RAC 环境下参数文件(spfile)的相关管理工作. 有关RAC环境下的重要参数描述,请参考:RAC 环境下重要参数 [python] view plain copy print? 1.参数文件的位置 SQL> show parameter instance_name

Win环境下的文件读写

在win环境下,有许多方法可以对文件进行读写操作,如MFC 中的CFile类,及一些开源的项目如QT中的QFile.开源的好得是可以多平台,而MFC只是微软自家的东西,对于想写跨平台的人,最好不用MFC. 最近在写开发时,突然碰到了一个问题,也是与读写文件有关,不过用的是C的方法,而不是C++,问题的表现是用C 中的Open创建的文件都是只读的,平常很少用这个方法所在网上找了下,才发现这个函数还有一个权限参数,默认是只读.现将C方式下的两种文件操作归纳下 open比起fopen是更低级别的IO操

IIS7下js文件启用Gzip后却不压缩的解决方法

本文转载:http://www.jb51.net/article/26340.htm IIS7下js文件启用Gzip后却不压缩的解决方法IIS7已经启用静态文件压缩(Gzip)但是死活不压缩,查找后发现是II7下MIME类型设置问题 将.js的MIME类型设置为application/javascript 再查看页面,已经启用了Gzip. 不过,几个天后又发现有的js文件被压缩,有的却没有. 查找原因发现是引用js文件是没有设置type <script></script> <

eclipse中每次重新启动服务,运行环境下的文件夹或者文件被还原

手动在tomcat运行环境修改了文件,但是每次在eclipse中重启tomcat的时候,总是会把eclipse中的文件更新到tomcat,类似还原,包括上传文件到服务器运行目录,重启的时候,会把上传的文件夹或者文件删掉,很是不解,最后按照下面的方法,暂时好像好了,后期有待观察.大家知道原因的,也可以发表意见,互相学习: 为了使项目默认部署到tomcat安装目录下的webapps中,show view->servers->找到需要修改的tomcat->右击 ①停止eclipse内的Tomc

ThinkPHP中关于JS文件如何添加类似__PUBLIC__图片路径

在对html样式进行优化的时候,经常会用到Js/jquery进行一些跳转切换的样式,而我们常做的就是在Js/jquery代码中嵌url图片链接代码,以实现动态交互的页面效果. 如下图所示: ------------------------------------------------------------------------------------------------------------------------------- 问题:Js文件不认识__PUBLIC__这些think