Laravel 5配置 - 环境和覆盖

Mar*_*łek 12 php laravel laravel-5 laravel-environment

我安装了新的Laravel 5副本.

我的detectEnvironment函数是这样定义的:

$app->detectEnvironment(function()
{
    return 'local';
    return getenv('APP_ENV') ?: 'production';
});
Run Code Online (Sandbox Code Playgroud)

在config\local我创建的database.php文件中:

<?php

return [
    'nothing' => 'new',
];
Run Code Online (Sandbox Code Playgroud)

我跑php artisan clear-compiled.

我的index方法WelcomeController是这样定义的:

public function index(Application $app)
{
    echo $app->environment();
    var_dump($app['config']['database']);
    //echo $app['config']['database'];
    return view('welcome');
}
Run Code Online (Sandbox Code Playgroud)

应用程序以这种方式导入: use Illuminate\Foundation\Application;

我得到的结果是:

local array(1) { ["nothing"]=> string(3) "new" } 
Run Code Online (Sandbox Code Playgroud)

而我希望Laravel能够将配置文件与生产程序级联(使用默认config\database.php文件).

奇怪的是,即使我return 'local';再次评论该行,php artisan clear-compiled它显示:

production array(1) { ["nothing"]=> string(3) "new" } 
Run Code Online (Sandbox Code Playgroud)

所以它似乎总是加载database.php文件内容(这一个来自本地文件夹)并覆盖主database.php文件.例如,当我更改此文件名时,它再次正常工作aaa.php.

它是一个错误还是环境配置不应该存储在config目录中?但如果没有,他们应该在哪里存放?我不知道这是一个错误还是一个功能,所以如果有人知道更多,请给我一个线索.

Mar*_*łek 13

虽然在Laravel dev(5.0)的文档中,有信息表明配置会级联,但事实并非如此.我在大约两周前对它进行了测试,目前似乎唯一能够为环境设置不同值的方法是使用ENV文件,其中为当前环境添加自定义值.将设置放在目录中将无法正常工作,但它可能会更改或者可能已在过去2周内更改过.


An *_*han 7

有一个软件包可以将级联配置系统带回Laravel 5.

免责声明:我是作者.

  • 谢谢.在我看来,L5是环境处理的倒退.指定"环境"的关键是能够为该环境加载正确的设置,而不必诉诸于一堆条件......等待它.....确定我正在运行的环境. L4在这方面要好得多 - 我是"本地的" - 然后加载"本地"配置.这是我需要的唯一条件. (5认同)