# 静态资源管理

在模板标签{{assert}}的说明中说过,当我们开启debug时,使用assert框架会启用一个简单的文件服务器。当关闭debug时生成的地址则是相对于{{public}}标签指向的目录。当我们设置static__path站点根目录/public时 {{assert web/js/1.js}}生成的地址则为http://mysite/public/web/js/1.js。此时public目录中并没有这个静态文件,静态文件是存在于应用目录下的 Resource中,此时我们要使用静态资源管理工具去管理静态资源目录。

# 管理工具

在cml中有两种方式去使用管理工具。

# 使用shell/cmd

php index.php make:symlink

框架会自动将项目下的所有应用下的Resource软链接到public下。

# 通过程序调用

\Cml\Tools\StaticResource::createSymbolicLink();

WARNING

注意控制权限,建议设置成只有超管才能执行调用

TIP

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


# 问题:为什么不直接把静态文件放到站点static下?

手册看到现在相信你对官方建议的开发目录也比较熟悉了 (事实上在cmlphp里整个项目目录结构是可以完全自定义的、这边只讨论官方推荐的目录结构) 。我们是按应用来区分。

projxxx目录下有n个应用。每个应用目录都包含了上线所需的所有配置、控制器、模型、视图、静态文件等,迁移的时候直接把应用目录copy走就好了。下线的时候要只要整个应用目录移除。 避免了以往我们上线/下线一个应用得跑到config/controller/model/static/view下分别发布/删除文件。 基于这种目的所有我们把静态文件放到应用目录下的Resource