Php Laravel配置文件结构

Php Laravel配置文件结构,php,laravel,laravel-5,laravel-5.4,Php,Laravel,Laravel 5,Laravel 5.4,我们对多个站点使用相同的代码库。还有一些配置文件,它们是站点特定的和通用的设置。我们希望将常用设置与特定于站点的设置合并 我们的配置文件夹结构是- 应用程序/配置- ssc/ brg/ app.php common.php 等等ssc和brg将分别为ssc和brg站点进行站点特定配置 为此,我们必须这样做- config('common'); config('brg.settings'); 但是在我们的代码库中,我们没有使用子文件夹机制。当我们将要实现子文件夹系统时,我们必

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

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

应用程序/配置-

  • ssc/
  • brg/
  • app.php
  • common.php
等等
ssc
brg
将分别为
ssc
brg
站点进行站点特定配置

为此,我们必须这样做-

    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.settings
scc.settings
您可以尝试以下方法:

config([
    'common' => array_merge(
        config('brg'), 
        config('common')
    )
]); 
config([
    'common' => array_merge(
        config('brg.settings'), 
        config('common')
    )
]); 
如果您想修改它,使
brg.settings
成为common内的键,请尝试以下操作:

config([
    'common' => array_merge(
        config('brg'), 
        config('common')
    )
]); 
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中的符号链接即可

或者

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


我认为最好还是将特定于站点的配置从config文件夹中移出,以避免Laravel需要解析不需要的文件。

config()->all()
将返回应用程序的所有配置项。是的。但是我想避免在开发代码时使用文件夹名。我想将文件夹内的配置合并到外部元素。是。当然,正如您提到的“我们对多个站点使用相同的代码库”,我假设这是一个多租户环境?您如何知道您所在的站点,以及每个站点是否共享相同的物理代码库(即驱动器上的相同位置)?代码库是相同的,但它们将保存在不同的文件夹或不同的服务器上。我们在
.env
文件中有一个变量,它将存储站点信息。好的,很明显,我用另外两种方法更新了我的答案,这可能会有所帮助,但没有一种很好的本地Laravel方法可以忽略子文件夹。嗯,在这种情况下,我们会将特定于站点的设置移到文件夹之外,并尽可能减少配置。如果我们能找到其他解决办法,我们可能会等一段时间。