我们对多个站点使用相同的代码库。并且将有一些配置文件,这些配置文件既是站点特定的,也是常见的设置。我们希望将常用设置与站点特定设置合并。
我们的配置文件夹结构为-
app / config-
,依此类推。 ssc
和brg
将分别保存ssc
和brg
网站的网站特定配置。
为此,我们必须做-
config('common');
config('brg.settings');
但是在我们的代码库中,我们没有使用子文件夹机制。当我们将要实现子文件夹系统时,我们必须更改代码库以实现我要避免的特定于站点的文件夹。
有什么方法可以实现子文件夹系统,而不必更改代码库?
答案 0 :(得分:1)
在多租户环境中
您可以将设置合并到中间件中的通用配置中,也可以在知道您所在的站点时将其合并:
config('common');
config('brg.settings'); // inside each have the same keys
config('ssc.settings'); // inside each have the same keys
因此,假设您想要common.settings
,其中settings
来自brg.settings
或scc.settings
,则可以尝试以下操作:
config([
'common' => array_merge(
config('brg'),
config('common')
)
]);
如果您想对其进行修改,以使brg.settings
成为常见的键,请尝试以下操作:
config([
'common' => array_merge(
config('brg.settings'),
config('common')
)
]);
更新-使用共享(已复制)文件夹方法
可以说您的配置文件夹具有:
config/common.php
config/brg/settings.php
然后,您可以尝试创建从config/brg/settings.php
到config/settings.php
的符号链接
$ cd config
$ ln -s brg/settings.php settings.php
您甚至可能希望将brg/settings.php
从config文件夹中移到类似sites/brg/settings/php
的位置,以避免laravel构建所有站点config的组合,而只需在config中使用符号链接即可
或者
作为部署的一部分,您可以创建一个artisan命令,以创建所需的物理配置文件,{。config/site/settings.php
)位于.env中。
我认为将特定于站点的配置移出config文件夹仍然是一件好事,以避免Laravel需要解析不需要的文件。