Php Laravel 5配置-环境和覆盖
我安装了全新的Laravel 5副本 我的detectEnvironment函数定义如下: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[
$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的致命错误。