Dotenv组件
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.2,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
Dotenv组件
Dotenv组件解析
.env
文件,使环境变量存储在他们通过_ENV美元
或$ _SERVER
。
安装
1
美元作曲家需要symfony / doob娱乐下载tenv
请注意
如果你安装这个组件之外的Symfony应用程序,你必须要求ob娱乐下载供应商/ autoload.php
文件在你的代码,使作曲家提供的类加载机制。读这篇文章为更多的细节。
使用
敏感信息和依赖环境设置应该被定义为环境变量(如推荐twelve-factor应用程序)。使用一个.env
文件来存储这些环境变量简化了开发和CI管理通过一个“标准”的地方,不可知论者的技术堆栈使用(例如Nginx vs PHP内置服务器)。
请注意
PHP有很多不同的实现这种“模式”。复制这个实现的目标是什么源.env
要做的事情。它试图尽可能相似的标准shell的行为(例如所以没有价值验证)。
加载一个.env
文件在您的PHP应用程序通过Dotenv:负载()
:
1 2 3 4 5 6 7
使用ob娱乐下载\组件\Dotenv\Dotenv;美元dotenv=新Dotenv ();美元dotenv- >负载(__DIR__。' / .env ');/ /还可以加载多个文件美元dotenv- >负载(__DIR__。' / .env ',__DIR__。' / .env.dev ');
鉴于以下.env
文件内容:
1 2 3
# .env根DB_PASS DB_USER = =
获得的价值_ENV美元
在你的代码:
1 2
美元dbus=美元_ENV(“DB_USER”];/ /还可以使用“$ _SERVER ' '
的load ()
方法不会覆盖现有的环境变量。使用过载()
如果你需要覆盖方法:
1 2
/ /……美元dotenv- >过载(__DIR__。' / .env ');
当你使用Dotenv组件你会注意到你可能想要有不同的文件根据你工作的环境。通常这种情况对当地发展或持续集成,您可能想要有不同的文件给你测试
和dev
环境。
您可以使用Dotenv: loadEnv ()
为了缓解这一过程:
1 2 3 4
使用ob娱乐下载\组件\Dotenv\Dotenv;美元dotenv=新Dotenv ();美元dotenv- >loadEnv (__DIR__。' / .env ');
Dotenv组件将寻找正确的.env
按照以下顺序文件加载而文件加载后覆盖以前装载的文件中定义的变量:
- 如果
.env
存在,它被加载。以防没有.env
文件,但.env.dist
,这一个将被加载。 - 如果一个包含前面提到的文件
APP_ENV
填充变量,变量和用于加载特定于环境的文件以后。如果APP_ENV
也不是定义在前面提到的文件,dev
假定为APP_ENV
默认并填充。 - 如果有一个
.env.local
代表一般现在加载本地环境变量。 - 如果有一个
.env env.local美元。
文件,这是加载。否则,它落回.env env美元。
。
乍一看这可能看起来复杂,但它给了你机会提交多个特定于环境的文件,可以适应当地的环境。给你承诺.env
,.env.test
和.env.dev
代表不同的配置设置为您的环境,每个人都可以调节使用.env.local
,.env.test.local
和.env.dev.local
分别。
请注意
.env.local
总是忽略测试
环境因为测试应该对每个人都产生相同的结果。
你可以调整定义环境变量,默认环境和测试环境中通过额外的参数Dotenv: loadEnv ()
(见loadEnv ()详情)。
4.2
的Dotenv: loadEnv ()
方法是在Symfony 4.2中引入的。ob娱乐下载
你不应该存储.env
文件在您的代码库中,因为它可能包含敏感信息;创建一个.env.dist
文件(或多个特定于环境的如上所示)与合理的默认值。
请注意
ob娱乐下载Symfony Dotenv可用于任何应用程序的环境:开发、测试、上线试运行,甚至生产。然而,真正在生产它的推荐配置环境变量,以避免解析的性能开销.env
文件为每个请求。
作为一个.env
文件是一个普通的shell脚本,你可以源
它在自己的shell脚本:
1
源.env
通过加上前缀添加评论#
:
1 2 3
#数据库证书根DB_PASS DB_USER = =#这是密码
通过加前缀变量使用环境变量值美元
:
1 2
DB_USER根DB_PASS = =美元{DB_USER}通过#包括用户密码前缀
通过嵌入命令$ ()
(不支持Windows上):
1
START_TIME = $(日期)
请注意
注意,使用$ ()
根据您的shell可能无法正常工作。