Laravel 5配置 - 环境和覆盖

时间:2014-12-07 13:19:29

标签: php laravel laravel-5 laravel-environment

我安装了新的Laravel 5副本。

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

$app->detectEnvironment(function()
{
    return 'local';
    return getenv('APP_ENV') ?: 'production';
});

config\local我已创建database.php文件:

<?php

return [
    'nothing' => 'new',
];

我运行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');
}

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

我得到的结果是:

local array(1) { ["nothing"]=> string(3) "new" } 

虽然我希望Laravel能够使用生产版本(使用默认的config\database.php文件级联配置文件。

奇怪的是,即使我对return 'local';行再次发表评论php artisan clear-compiled,也会显示:

production array(1) { ["nothing"]=> string(3) "new" } 

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

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

4 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:7)

package将级联配置系统带回Laravel 5.

免责声明:我是作者。

答案 2 :(得分:3)

对我而言,它看起来像是Laravel 5 dev分支中的缺陷。我能够通过添加手动环境检测和配置来解决这个问题。这段代码就是这样做的。

'default' => $app->environment()=='testing'?'sqlite':'mysql',

答案 3 :(得分:0)

配置Laravel 5环境很容易。

  1. 打开根应用程序文件夹,找到&#34; .env.example&#34;,
  2. 复制并重命名为&#34; .env&#34;,
  3. 请适应&#34; .env&#34;将文件存入您的环境,
  4. 如果您使用GIT,请确保不要将此文件推送到GIT存储库。 有关完整说明&#39;,请编写此配置here
  5. 编辑;

    我引用了他的github存储库readme.md文件中的开发人员;

      

    phpdotenv是针对开发环境而制定的,通常应该   不能用于生产。在生产中,实际环境   应该设置变量,以便没有加载的开销   每个请求都有.env文件。这可以通过自动化实现   使用Vagrant,chef或Puppet等工具进行部署过程,或者可以   使用Pagodabox和Heroku等云主机手动设置。

    所以,你需要创建&#34; .env&#34;每台机器的文件,不要使用&#34; .env&#34;生产服务器中的文件。