问题引入
最近在云服务器上部署tp5项目。由于将项目从Win10移植到Linux上,需要修改某些地方。其中就包括:视图输出字符串'view_replace_str'。
权限问题也是比较常见,之前写过博客了,在这里就不赘述了。本博客,讲述两个问题:
1、Linux环境下如何修改'view_replace_str'
2、修改后'view_replace_str',不生效
1、Linux环境下如何修改'view_replace_str'
正确配置:
// 视图输出字符串内容替换 'view_replace_str' => [ '__admin__' => '/static/assets', '__index__' => '/static/index' ]
为啥这样写?应该都知道 “/” 在 Linux 中表示 “根目录”,但是此处 最前面的 “/” 显然并不代表 整个系统的根目录。那指代啥?指代的应该是:当前项目的虚拟目录路径。
tp5的入口文件index.php的默认位置是在public目录下。当然,你也可以把它转移到项目的根目录下(并不建议这么做)。如果,入口文件index.php在public目录下,那么,项目的虚拟目录应该直接指向public目录!
我的项目就是上述情况,所以上述截图的 “/” 就指代:public目录!
有人可能会问:能不能写成 “static/assets”?有兴趣的可以去测试一下,我觉得应该是不行的。
2、修改后'view_replace_str',不生效
由于测试,我修改过几次view_replace_str,但发现修改并不生效。view_replace_str错误,导致了,尽管页面能访问,但是静态资源路径错误,所以静态资源加载不出来。
这个问题困扰了我很久,在反复测试后,我怀疑应该是tp5的缓存问题,于是找到了以下博客:
https://blog.csdn.net/sinat_41274057/article/details/100658809
测试发现,确实是因为缓存问题,上述博客的方法确实可行。但问题是,我们不应该直接改动框架代码!那么tp5是否提供了相关的配置参数供我们启用和禁用模板缓存呢?
可惜,在tp5的官方文档中并没有找到。但查阅源码,可以很清楚地发现,是有的!
thinkphp\library\think\Template.php
看见上面 $config 的参数名,是不是很熟悉? 因为 在config.php 中见过。
所以,如果我们想要通过配置参数去,禁用 模板缓存,解决 view_replace_str 修改无效的问题,只需增加以下参数
在与老师交流的过程中,老师说可以试试清除runtime下的缓存试试。但我没试过,因为上面的解决方案生效了,我就没试。