我安装了新的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
目录中?但如果没有,他们应该在哪里存放?我不知道这是一个错误还是一个功能,所以如果有人了解它,请给我一个线索。
答案 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环境很容易。
我引用了他的github存储库readme.md文件中的开发人员;
phpdotenv是针对开发环境而制定的,通常应该 不能用于生产。在生产中,实际环境 应该设置变量,以便没有加载的开销 每个请求都有.env文件。这可以通过自动化实现 使用Vagrant,chef或Puppet等工具进行部署过程,或者可以 使用Pagodabox和Heroku等云主机手动设置。
所以,你需要创建&#34; .env&#34;每台机器的文件,不要使用&#34; .env&#34;生产服务器中的文件。