我刚刚接触过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文件,&#39;测试&#39;和&#39; local&#39;,将它们重命名为&#39; .env&#39;因为我需要它们。这显然不是有效的或可以容忍的。有什么建议吗?
答案 0 :(得分:0)
我能够在database.php配置中设置一个不同的数据库连接来设置一个env环境变量:
配置/ database.php中
- 'default' => 'mysql',
+ 'default' => env('DB_CONNECTION','mysql'),
phpunit.xml
<env name="DB_CONNECTION" value="sqlite"/>
答案 1 :(得分:0)
正如文档所示,当您运行phpunit时,默认APP_ENV为testing
并在phpunit.xml
(http://laravel.com/docs/testing#introduction)中设置。但是流明没有任何规则为我们加载.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
然后app会从/.env.testing
请注意:
如果你接受我的想法, - env选项无效。另一种方法是添加前缀APP_ENV = testing。我认为这是一个laravel的错误,因为在cli模式下运行命令时不会调用DetectEnvironment Closure。