tp5.1中由于配置加载比较靠后可能导致隐藏问题

我在tp官方发帖了,但5.1不再更新了。
官方回复
简单的概括一下,
tp5.1框架流程是:
1、 加载行为扩展文件
2、 加载公共文件
3、 加载系统助手函数
4、 加载中间件
5、 注册服务的容器对象实例
6、 自动读取配置文件
因为加载配置信息放在了第6步,前面5部的时候,你如果使用框架的组件(常用的cahce、log),那组件的不是按照你config里面的配置去运行的。
这个问题比较隐蔽,因为只是使用了默认配置,不会直接报错,你未必会发现它。
举个简单的例子:框架自带的一个共文件:
application/common.php,这个文件的加载顺序对应上面的[2、 加载公共文件]
如果你在里面写了一行:

<?php
// 应用公共文件

\think\facade\Cache::set('xx', 1);

那么,尽管你在config/cache.php配置是使用redis缓存,但这里仍然是使用file驱动。
你可以发现存在runtime/cache目录。(如果事先就有这目录,删了再测试)。
使用\think\facade\Cache的任何方法都会导致cache驱动问题,Cache::set
这个问题比较容易出现的是[2、4、5]阶段,自己写公共文件或第三方composer库的中间件中。
如果在项目中出现,可能会影响性能,尤其是项目开启路由缓存,将会导致路由缓存使用file驱动。

讨论数量: 2

tp6也是这个流程吧

1年前 评论
ichynul (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!