Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5配置-环境和覆盖_Php_Laravel_Laravel 5_Laravel Environment - Fatal编程技术网

Php Laravel 5配置-环境和覆盖

Php Laravel 5配置-环境和覆盖,php,laravel,laravel-5,laravel-environment,Php,Laravel,Laravel 5,Laravel Environment,我安装了全新的Laravel 5副本 我的detectEnvironment函数定义如下: $app->detectEnvironment(function() { return 'local'; return getenv('APP_ENV') ?: 'production'; }); public function index(Application $app) { echo $app->environment(); var_dump($app[

我安装了全新的Laravel 5副本

我的detectEnvironment函数定义如下:

$app->detectEnvironment(function()
{
    return 'local';
    return getenv('APP_ENV') ?: 'production';
});
public function index(Application $app)
{
    echo $app->environment();
    var_dump($app['config']['database']);
    //echo $app['config']['database'];
    return view('welcome');
}
config\local
中,我创建了
database.php
文件:

<?php

return [
    'nothing' => 'new',
];
应用程序是通过以下方式导入的:
use-illumb\Foundation\Application

我得到的结果是:

local array(1) { ["nothing"]=> string(3) "new" } 
而我希望Laravel将配置文件与生产文件级联(使用默认的
config\database.php
文件)

奇怪的是,即使我注释行
返回'local';
再次运行
php artisan clear compiled
它显示:

production array(1) { ["nothing"]=> string(3) "new" } 
因此,它似乎总是加载
database.php
文件内容(这是本地文件夹中的内容)并覆盖主
database.php
文件。当我将此文件名更改为例如
aaa.php
时,它再次正常工作


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

尽管在Laravel dev(5.0)的文档中有信息表明配置将级联。这不是真的。我在大约2周前测试过它,目前看来,为环境设置不同值的唯一方法是使用ENV文件,在其中为当前环境设置自定义值。将设置放在目录中不会像以前那样工作,但它可能会更改或者可能已经更改了2周。

对我来说,这看起来像是Laravel 5开发分支中的缺陷。我可以通过添加手动环境检测和配置来解决问题。这段代码可以做到这一点

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

很容易配置Laravel 5环境

  • 打开根应用程序文件夹并查找“.env.example”
  • 复制并重命名为“.env”
  • 请将“.env”文件放入您的环境中
  • 如果使用GIT,请确保不要将此文件推送到GIT存储库。 为了“完整的解释”,我写了这个配置
  • 编辑; 我在github repository readme.md文件中引用了开发人员的话

    phpdotenv是为开发环境而设计的,通常应该 不用于生产。在生产中,实际环境 应设置变量,以避免加载 .env文件。这可以通过自动 使用诸如Vagrant、chef或Puppet之类的工具部署过程,或者 使用云主机(如Pagodabox和Heroku)手动设置

    因此,您需要为每台机器创建“.env”文件,而不要在生产服务器中使用“.env”文件。

    有一种方法可以将级联配置系统带回Laravel 5


    免责声明:我是作者。

    快速提示:使用$app->environment(testing')类似于$app->environment()=='testing'虽然此链接可以回答问题,但最好在此处包含答案的基本部分并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。编辑了我的答案。我从博客中复制了一些重要注释。但是…为什么有人给我(-1)?:(我没有给你否决票,所以我不能确定,但我想你可能得到了,因为这实际上并没有回答问题。问题是“我的配置有什么问题?”而你的回答是“这样做以更改配置…”.这是相关的,但没有抓住问题的重点。看看公认的答案,看看它与具体问题有多大关系。我认为这是一个倒退。指定“环境”的意义就是能够为该环境加载正确的设置,而不必求助于一系列条件……等等……确定我正在运行的环境。L4在这方面要好得多——我是“本地的”——好的,加载“本地”配置。这是我唯一需要的条件。“配置Laravel 5环境很容易。”这就是你被否决的原因。我过去可以在我的存储库中设置所有内容。现在我应该在存储库之外手动管理一堆愚蠢的.env文件,而且我被告知这更容易。谢谢。我认为L5是env处理的倒退。指定“环境”的意义就是能够为该环境加载正确的设置,而不必求助于一堆条件来……等等……确定我正在运行的环境。L4在这方面要好得多——我是“本地的”——好的,然后加载“本地的”配置。这是我唯一需要的条件。我完全同意ekeyser。这真的是一个倒退。查询生成器中删除的缓存也是一样的。还有很多其他东西。Flash消息。我从v3开始就在使用Laravel。这个v5配置设置太疯狂了。它解决了少数人的用例,而牺牲了所有人的利益lse。@An Phan我不太喜欢config.envName方法,我的应用程序部署在3台服务器上:)为什么不在config文件夹中放置envName文件夹?@junkystu,因为这会触发Laravel的致命错误。