Php Laravel 5.4基于环境的配置文件

Php Laravel 5.4基于环境的配置文件,php,laravel,symfony,laravel-5,laravel-5.4,Php,Laravel,Symfony,Laravel 5,Laravel 5.4,我试图根据环境更改Laravel配置变量,但我不知道如何更改 获取配置的代码是 Config::get( 'contants.api_url' ); 我正在尝试对活动环境和开发环境分别得出一个结果 现实生活场景 我需要覆盖一些配置文件,这样使用开发环境的每个人都有相同的基本配置。我不能为此使用.env文件,因为它不是团队之间共享的,每个人都有自己的版本 我尝试了什么: 我在这里读到,您可以在/config文件夹中创建与环境匹配的子文件夹,以覆盖默认的配置文件。唉,它对我不起作用,关于主题的La

我试图根据环境更改Laravel配置变量,但我不知道如何更改

获取配置的代码是

Config::get( 'contants.api_url' );
我正在尝试对活动环境和开发环境分别得出一个结果

现实生活场景

我需要覆盖一些配置文件,这样使用开发环境的每个人都有相同的基本配置。我不能为此使用.env文件,因为它不是团队之间共享的,每个人都有自己的版本

我尝试了什么:


我在这里读到,您可以在/config文件夹中创建与环境匹配的子文件夹,以覆盖默认的配置文件。唉,它对我不起作用,关于主题的Laravel 5.4文档也没有提到这个选项,因此我认为它可能已经被弃用了。

一个选项可能是使用服务提供商。如果只覆盖一个或两个值,那么您最好使用AppServiceProvider,否则我建议创建一个新的服务,例如ConfigServiceProvider

在服务提供商的引导方法中,您可以添加如下内容:

if (app()->environment() === 'local') {
   config()->set('contants.api_url', 'http://example.com');
}

要根据环境更改配置变量,请执行以下操作:

示例文件:config/database.php


在Laravel 5.8上测试并运行。

您想要更改的配置值是什么?假设config/constants.php文件有一个值api_url,我需要为开发服务器上的每个人覆盖它。我投了赞成票,但我并不特别喜欢这种方法的设计。你确定Laravel没有类似的核心功能吗。如果没有,那么我将把它标记为一个答案。@FifthEon不,我不相信Laravel有这个功能了,但我可能弄错了。公平地说,您上面提到的github回购与我建议的方法非常相似。根据您在评论中给出的示例,我假设您只会更改一个或两个值,因此我并不认为展示更复杂的系统有什么意义,但如果您查看回购协议,它只会提供一个服务提供商,再次检查环境并替换配置值。这是真的,我只是不喜欢将不可扩展的解决方案合并到我们的大型应用程序中。但再一次,它可能只是几个变量,是的,所以我将使用它。
       'mysql' => [
            'driver' => mysql,
            'url' => env('DATABASE_URL'),
            'host'=> (env('APP_ENV') === 'local' ? env('DB_HOST_LOCAL') : env('DB_HOST_PRODUCTION')),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'default'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'options' => (env('APP_ENV') === 'local' ? [
                'some_option' =>  env('SOME_ENV')
            ] : []),
        ],