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方法可以忽略子文件夹。嗯,在这种情况下,我们会将特定于站点的设置移到文件夹之外,并尽可能减少配置。如果我们能找到其他解决办法,我们可能会等一段时间。