我刚刚掌握Laravel5,之前有一些L4的经验。我遇到的问题之一是环境配置,主要是测试。
我正在尝试连接到一个mysqlite数据库&经过多次搜索,我想出的最好的办法是在配置文件中添加一个条件,如下所示:
'default' => $app->environment('testing') ? 'sqlite':'mysql'
在我的phpunit.xml文件中:
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
</php>
然而,现在当我尝试运行我的测试套件时,我收到以下错误:
ReflectionException: Class env does not exist.
在这一点上,我唯一的选择似乎是创建两个独立的.env文件,"testing"one_answers"local",根据需要将它们重命名为".env"。这显然不是有效的,也不是可以容忍的。有什么建议吗?
我能够设置不同的数据库连接,在数据库中设置env环境变量。php config:
config/database.php
- 'default' => 'mysql',
+ 'default' => env('DB_CONNECTION','mysql'),
phpunit.xml
<env name="DB_CONNECTION" value="sqlite"/>
如文档所示,当您运行phpunit时,默认的APP_ENV是testing
,并在phpunit.xml
中设置(http://laravel.com/docs/testing#introduction)。但lumen没有任何规则为我们加载配置文件,如.env.testing
或.env.production
。
但是,laravel为我们提供了一个callback
。
$app->detectEnvironment(function() use ($app){
if (file_exists(__DIR__.'/../'.'.env.' .getenv('APP_ENV') )) {
$app->loadEnvironmentFrom('.env.'. getenv('APP_ENV') );
}
});
在指定的环境下运行一些命令:
APP_ENV=testing artisan serve
则应用程序将从/.env.testing
加载配置
注:
如果你接受我的想法,--env选项是无效的。另一种方法是添加前缀APP_ ENV=测试。我认为这是laravel的一个错误,因为在cli模式下运行命令时不会调用DetectEnvironment Closure。