Laravel配置文件结构

Sou*_*ose 5 php laravel laravel-5 laravel-5.4

我们对多个站点使用相同的代码库.并且将有配置文件,它们都是特定于站点的设置和常用设置.我们希望将常用设置与站点特定设置合并.

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

app/config -

  • SSC /
  • BRG /
  • app.php
  • 的common.php

等等.ssc并且brg将举行现场具体CONFIGS为sscbrg分别的网站.

为此我们必须这样做 -

    config('common');
    config('brg.settings');
Run Code Online (Sandbox Code Playgroud)

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

有没有办法实现子文件夹系统,而不必更改代码库?

Leo*_*mer 1

在多租户环境中

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

config('common');
config('brg.settings'); // inside each have the same keys
config('ssc.settings'); // inside each have the same keys
Run Code Online (Sandbox Code Playgroud)

因此,假设您想要common.settings来自settings其中一个,brg.settings或者scc.settings您可以尝试如下所示:

config([
    'common' => array_merge(
        config('brg'), 
        config('common')
    )
]); 
Run Code Online (Sandbox Code Playgroud)

如果你想修改它,使其brg.settings成为公共键,请尝试以下操作:

config([
    'common' => array_merge(
        config('brg.settings'), 
        config('common')
    )
]); 
Run Code Online (Sandbox Code Playgroud)

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

假设您的配置文件夹有:

config/common.php
config/brg/settings.php
Run Code Online (Sandbox Code Playgroud)

然后你可以尝试创建一个从config/brg/settings.php到 的符号链接config/settings.php

$ cd config
$ ln -s brg/settings.php settings.php
Run Code Online (Sandbox Code Playgroud)

您甚至可能想将brg/settings.phpconfig 文件夹移出,sites/brg/settings/php以避免 laravel 构建所有站点配置的组合,而只需使用 config 中的符号链接到您想要的内容。

或者

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

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