Contributed by
Fabien Potencier
in #21234.
开发程序时的一个常见的实践是,把一些配置选项作为环境变量存储在 .env
文件中(发音是"dot-env")。在Symfony程序中你可能已经使用了这个技巧,但在Symfony 3.3中我们决定把它变成一个内置功能,这要归功于全新的Dotenv组件。
在实践中,Dotenv组件解析 .env
文件,以便令存储在那里面的环境变量(environment variables),能够在你的程序中通过 getenv()
, $_ENV
或 $_SERVER
被访问到。如果你的 .env
文件包含了这些变量:
1 2 | DB_USER=root
DB_PASS=pass |
下列代码将解析它们,然后把它们转换成环境变量:
1 2 3 | use Symfony\Component\Dotenv\Dotenv;
(new Dotenv())->load(__DIR__.'/.env'); |
现在你可以像下面这样在程序中取得数据库密码:
1 | $dbPassword = getenv('DB_PASS'); |
除了加载变量,你还可以解析它们,因为组件定义了三个stage(阶段):加载(loading),解析(parse)和装载(populate)。
在创建新组件之前,我们评估了既存的提供了相似功能的类库,但是没有一个能够满足我们的特定需求集:
- 变量不应该被以任何方式验证(因为真实的环境变量只能是字符串你无法验证它们)。
- 组件提供了一个“你在真实的bash shell script所能够做到的”的严格实现(strict implementation),别无其他。支持
$VAR
和${VAR}
,你还可以拼接字符串,执行命令并把结果存入一个变量,等等。 - 绝佳的错误提示,易于找到问题。
- 干净小巧的API,没有不必要的抽象层,比如“直接添加环境变量”(只需使用
putenv()
)。