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())。