Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel 5中设置多组环境变量_Php_Laravel_Environment Variables_Laravel 5 - Fatal编程技术网

Php 在Laravel 5中设置多组环境变量

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文件可以定义多组环境变量;很像L4是如何使用
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()。到目前为止还不错

接下来,我通过
$\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
文件。实际上,这看起来是最好的解决方案。这就是我最后要做的。