Php 在Laravel 5中设置多组环境变量
编辑:这个问题最初适用于测试,但本质上我想知道是否有可能有多个.env文件可以定义多组环境变量;很像L4是如何使用Php 在Laravel 5中设置多组环境变量,php,laravel,environment-variables,laravel-5,Php,Laravel,Environment Variables,Laravel 5,编辑:这个问题最初适用于测试,但本质上我想知道是否有可能有多个.env文件可以定义多组环境变量;很像L4是如何使用env.local.php,env.testing.php等实现的 我正在使用Laravel 5并在homestead box上开发 我用本地环境变量(mysql数据库等)填充了.env文件 我希望使用sqlite数据库进行测试,因此我在phpunit.xml中添加了一些变量,因此看起来如下所示: <php> <env name="APP_ENV" val
env.local.php
,env.testing.php
等实现的
我正在使用Laravel 5并在homestead box上开发 我用本地环境变量(mysql数据库等)填充了.env文件 我希望使用sqlite数据库进行测试,因此我在
phpunit.xml
中添加了一些变量,因此看起来如下所示:
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="DB_DRIVER" value="sqlite" />
<env name="DB_PATH" value="database.sqlite" />
</php>
配置文件中引用了所有适当的环境变量,例如env('DB\u DRIVER')
然而,当我尝试使用php-artisan-migrate--env=testing
迁移数据库时,我得到了“无需迁移”的结果,这表明Laravel正在尝试迁移我的本地(mysql)数据库(已经迁移)
我决定通过tinker进一步探索,所以我运行了php artisan tinker--env=testing
。在tinker中,我运行了app()->environment()返回“testing”的代码>。到目前为止还不错
接下来,我通过$\u env
回显了env变量,它返回了我的local环境变量,尽管环境设置为testing
为什么会这样?看起来Laravel忽略了phpunit.xml env变量,而不管怎样都只使用了.env文件
编辑
如果通过phpunit本身运行,laravel似乎只使用phpunit.xml文件,即使环境设置为单独测试
如果有人知道如何在L5中设置多个环境,我很欣赏这种L4方式,因为它只是制作一个.env.testing
文件是行不通的。在.env文件中定义环境变量。
例如:
DB_HOST=localhost
DB_DATABASE=database_name
DB_USERNAME=homestead
DB_PASSWORD=secret
然后您可以使用
env('DB_HOST')
原始问题的一个快速解决方法,即测试环境案例,是调用$this->artisan('migrate')代码>来自tests/TestCase.php
类,因此它将获取phpunit.xml
中定义的数据库配置值并执行迁移。phpunit.xml文件中的配置值将仅由phpunit使用。任何Artisan命令都将使用.env文件中的内容。问题在于测试特定的环境变量。问题的第2行指出存在一个.env
文件。实际上,这看起来是最好的解决方案。这就是我最后要做的。