我有一个可以运行同一站点的多个变体的代码库。是否有一种整齐的方法来使配置文件相互扩展,以便我可以拥有一个带有多个子级的父配置文件,而这些子级可以覆盖特定值?
这样的事情,
config/site.php
return [
'foo' => 10,
'bar' => 20,
'baz' => 30
];
config/site1/site.php
return [
'foo' => 5,
];
config/site2/site.php
return [
'baz' => 99
];
可以让您重新获得以下值
echo config('site1.site.foo'); // 5 - from site1/site.php
echo config('site1.site.bar'); // 20 - from site.php
echo config('site1.site.baz'); // 30 - from site.php
echo config('site2.site.foo'); // 10 - from site.php
echo config('site2.site.bar'); // 20 - from site.php
echo config('site2.site.baz'); // 99 - from site2/site.php
感觉我缺少一个简单的答案...
答案 0 :(得分:0)
现在,我唯一能想到的就是假设您有多个实例。
1)在您的环境变量中添加CLIENT=site1
2)创建一个配置文件,例如: tenant.php
return [
'folder' => env('CLIENT', 'default')
];
3)当您需要其中一个客户端的特定配置文件时:
config(config('tenant.folder')'.site.baz');
4)如果baz
不存在时需要默认值
config(config('tenant.folder')'.site.baz', 'default.site.baz');
更好的方法是创建一个设置数据库,您可以将其缓存并与助手一起使用(例如:$baz = settings('baz', 'default');
)
答案 1 :(得分:0)
我将创建一个执行租户感知配置的全局函数,如下所示:
function configWithTenant($tenant='', $configPath) {
if (empty($tenant)) {
return config($configPath);
}
return config("$tenant.$configpath");
}
因此,当您调用此函数时,如果未传入任何租户,它将读取默认的site,否则它将读取tenant1.site