Laravel 配置文件结构

Laravel configuration file structure

我们对多个站点使用相同的代码库。并且会有配置文件,它们都是站点特定的和通用的设置。我们想将通用设置与站点特定设置合并。

我们的配置文件夹结构是 -

app/config -

等等。 sscbrg 将分别保存 sscbrg 站点的站点特定配置。

为此我们必须做 -

    config('common');
    config('brg.settings');

但是在我们的代码库中我们没有使用子文件夹机制。当我们将实施子文件夹系统时,我们必须更改代码库以实施我想避免的站点特定文件夹。

有什么方法可以实现子文件夹系统并且不必更改代码库吗?

在多租户环境中

您可以将设置合并到中间件内的公共配置中,或者在您知道自己所在的站点时:

config('common');
config('brg.settings'); // inside each have the same keys
config('ssc.settings'); // inside each have the same keys

所以假设您想要 common.settings 其中 settings 来自 brg.settingsscc.settings 您可以尝试如下操作:

config([
    'common' => array_merge(
        config('brg'), 
        config('common')
    )
]); 

如果你想修改它,使 brg.settings 成为 common 中的键,请尝试以下操作:

config([
    'common' => array_merge(
        config('brg.settings'), 
        config('common')
    )
]); 

更新 - 对于共享(复制)文件夹的方法

假设您的配置文件夹有:

config/common.php
config/brg/settings.php

然后你可以尝试创建一个从 config/brg/settings.phpconfig/settings.php

的符号链接
$ cd config
$ ln -s brg/settings.php settings.php

您甚至可能想将 brg/settings.php 从配置文件夹中移出到 sites/brg/settings/php 之类的文件夹中,以避免 laravel 构建所有站点配置的组合并仅使用符号链接在配置中你想要什么。

或者

作为部署的一部分,您可以创建一个 artisan 命令来创建您需要的物理配置文件,例如 config/site/settings.php 给定 .env 中的站点。

我认为将特定于站点的配置移出配置文件夹以避免 Laravel 需要解析不需要的文件仍然很好。