ThinkPHP中通过Config::load获取配置的一些小问题

发布时间:2023-12-16浏览次数:295 次
在ThinkPHP中,当我们添加一些自定义配置文件时,更倾向于在config目录下新建一个新的目录,然后在里面写入我们的配置文件。不过读取这样的配置文件时,有一

在ThinkPHP中,当我们添加一些自定义配置文件时,更倾向于在config目录下新建一个新的目录,然后在里面写入我们的配置文件。不过读取这样的配置文件时,有一些小小的问题。

官方文档提供了如下说明:

单应用模式的config目录下的所有配置文件系统都会自动读取,不需要手动加载。如果存在子目录,你可以通过Config类的load方法手动加载,例如:

// 加载config/extra/config.php 配置文件 读取到extra

\think\facade\Config::load('extra/config', 'extra');

不过在实际读取时,经常会发现读取不到。原因很能是跨应用读取了。不过根据官方给的说明Config::load的第一个参数,可以是相对于应用根目录的路径,也可以是绝对路径。

我们分别在 index、admin应用目录下的config配置文件中,新建文件夹extra,并在里面添加abc.php文件,作为我们的自定义配置,文件中均添加test配置项,但分别给出不同的值。

同时也在全局应用中,添加同样的配置文件,进行测试。

在Index应用下,使用:

$a =  Config::load('extra\abc', 'extra');

print_r($a);

默认可直接读取到全局的extra配置信息,如果删除全局的config/extra配置,则会发现,全局的读取不到,当前的Index应用的也读取不到。

修改为相对public的相对路径:

Config::load('../app/index/config/extra/abc', 'extra');
Config::load('../app/admin/config/extra/abc', 'extra');

则可以分别读取到Index应用和Admin应用里面的配置信息。但是,这样的相对路径多少让人看着有些担心上线后的问题。尝试一些其他的方式,也是未果,可见,Config:load()方法的主要应用场景是读取全局配置,在单个应用中获取配置的话,就需要写相对路径。

那么,在项目中,要么我们将个性化的配置信息,放置在全局配置config目录下,如果配置信息仅对某一个应用有效,那么就仅在对应应用目录下,创建config目录,直接写入配置文件即可,无需再嵌套多层目录。

 

扫一扫,在手机上查看