使用附加环境文件配置 Laravel
2024 年 5 月 24 日
在 Laravel 中,您可以配置将加载的其他环境文件,而不是
.env
文件。此功能对于测试很有帮助,您可以在其中加载
.env.testing
环境文件而不是默认的。您通常不需要使用此功能,但很高兴知道通过设置
APP_ENV
环境变量,Laravel 可以检测自定义配置。
CLI 示例
此功能最简单的示例是在使用 Artisan 控制台甚至是运行 Laravel 时使用不同的环境文件
phpunit
命令行界面。
使用 Artisan 命令,您还可以使用不同的
.env
文件使用
--env
标志或定义
APP_ENV
。例如,运行以下命令,Laravel 将查找
.env.demo
:
# Set up `.env.demo`
cp .env .env.demo
echo "\nEXAMPLE_SETTING=demo" >> .env.demo
# Use the `demo` env
php artisan tinker --env=demo
# Or set APP_ENV
APP_ENV=demo php artisan tinker
如果找到,Laravel 将不会加载
.env
文件而是加载
.env.demo
:
.env.demo
代替
.env
使用
.env.testing
用于 PHPUnit 测试
基于我们对加载特定 ENV 文件(如果存在)的 Laravel 框架的了解,在 PHPUnit 中运行 Laravel 功能测试将使用
.env
默认文件。使用
.env
用于测试和本地开发可能很快会导致问题,例如配置单独的数据库进行测试。您可以在中定义数据库连接详细信息
phpunit.xml
,但我们还要看看将它们设置为
.env.testing
。
PHPUnit 定义了一个
APP_ENV
环境变量在
phpunit.xml
,这意味着 Laravel 寻找
.env.testing
引导功能测试时的文件,因为
phpunit.xml
文件定义
APP_ENV
在 Laravel 框架在功能测试中启动之前:
<env name="APP_ENV" value="testing"/>
这意味着我们可以复制股票
.env
文件到
.env.testing
并避免在测试期间混合两个文件:
cp .env .env.testing
echo "\nEXAMPLE_SETTING=testing" >> .env.testing
您可以在中配置环境变量
phpunit.xml
。不过,我喜欢使用
.env.testing
文件以确保专门用于测试的干净环境。是否进行版本控制也取决于您
.env.testing
或忽略它
.gitignore
。
复制后
.env
文件,您可以验证
.env.testing
通过将以下内容添加到您的测试中来加载
tests/Feature
文件夹。测试在
tests/Unit
文件夹不会引导 Laravel 框架:
/**
* A basic test example.
*/
public function test_the_application_returns_a_successful_response(): void
{
logger('Which environment file is Laravel using?', [
'file' => $this->app->environmentFile()
]);
$response = $this->get('/');
$response->assertStatus(200);
}
当我跑步时
phpunit
,我收到以下日志,确认我正在使用
.env.testing
文件:
[2024-05-24 00:22:42] testing.DEBUG: Which environment file is Laravel using? {"file":".env.testing"}
如果您在 VCS 中忽略此文件,您可以添加一个示例文件
.env.testing.example
符合您团队的惯例,或者让他们决定如何在本地配置测试。我建议在 CI 中设置系统级环境变量来配置测试数据库等内容。
查看 Laravel 文档 有关环境配置的更多详细信息。如果您好奇它在框架级别是如何工作的,请查看 设置环境文件路径 方法和 检查特定环境文件 在 Laravel 框架源代码中。
帖子 使用附加环境文件配置 Laravel 首先出现在 Laravel 新闻 。
加入 Laravel 时事通讯 直接在您的收件箱中获取所有此类最新的 Laravel 文章。