静态资源管理

在模板标签的说明中说过,当我们开启debug时,使用assert框架会启用一个简单的文件服务器。当关闭debug时生成的地址则是相对于{{public}}标签指向的目录。当我们设置static__path站点根目录/public时 {{assert web/js/1.js}}生成的地址则为http://mysite/public/web/js/1.js。此时public目录中并没有这个静态文件,静态文件是存在于应用目录下的 Resource中,此时我们要使用静态资源管理工具去管理静态资源目录。在cml中有两种方式去使用管理工具。
1. 使用shell/cmd 执行以下命令生成
  • v2.7.1+ php index.php make:symlink
  • v2.7.0及以下版本 php index.php cml.cmd StaticResource::createSymbolicLink
    框架会自动将项目下的所有应用下的Resource软链接到public下。

使用命令管理静态文件需要使用exec方法,需要将php.inidisable_functionsexec移除。由于开发环境和线上环境的软链接路径多是不一样的,所以上线后记得重新生成(假设开发环境有生成过)。如果静态资源是存放在云存储上只要上传文件,同时修改配置文件的static__path配置项为相应地址

问题:为什么不直接把静态文件放到站点static下?
手册看到现在相信你对官方建议的开发目录也比较熟悉了(事实上在cmlphp里整个项目目录结构是可以完全自定义的、这边只讨论官方推荐的目录结构)。我们是按应用来区分。在proxxxx目录下有n个应用。每个应用目录都包含了上线所需的所有配置、控制器、模型、视图、静态文件等,迁移的时候直接把应用目录copy走就好了。下线的时候要只要整个应用目录移除。避免了传统的我们上线/下线一个应用得跑到config/controller/model/static/view下分别发布/删除文件**。基于这种目的所有我们把静态文件放到应用目录下的Resource

原文: http://doc.cmlphp.com/devops/static.html