avris / dotenv

.env 文件处理器

v1.0.0 2017-12-31 13:31 UTC

This package is auto-updated.

Last update: 2024-09-12 03:52:31 UTC


README

安装

composer require avris/dotenv

.env

环境变量是一种调整应用程序以适应特定环境的绝佳方式,尤其是对于敏感数据,如数据库密码。

这些变量应由您的 HTTP 服务器设置,但在本地开发时,有一个 .env 文件要简单得多

APP_ENV=prod
APP_DEBUG=0

DB_HOST=127.0.0.1
DB_DATABASE=prod
DB_USER=user
DB_PASS=pass

您只需在前端控制器中加载此文件即可使用 Dotenv

(new \Avris\Dotenv\Dotenv)->load(__DIR__ . '/../.env');

现在,所有来自文件的变量都将通过 getenv$_ENV$_SERVER 可用。

高级

如果您的变量值包含空格,请记住引用它

FOO="Lorem ipsum"

如果一行以 # 开头,您可以添加注释

# comment
FOO=bar

您可以在其他变量内部使用变量(用 \$ 转义 $

VAR1=osiem
VAR2="${VAR1}naście ${CZEGO}"
VAR3=\$ESC

您还可以使用命令的输出(需要 symfony/process,用 \$ 转义 $

COMM1=$(whoami)
COMM2=\$(whoami) 

记住 .env 是一个有效的 bash 脚本。

其他功能

您可以直接从文件中读取变量,而无需将其作为环境变量填充

$vars = (new \Avris\Dotenv\Dotenv)->read(__DIR__ . '/../.env');

或者只将变量填充到环境变量中,而不解析文件

(new \Avris\Dotenv\Dotenv)->populate([
    'FOO' => 'foo',
    'BAR' => 'bar',
]);

您还可以撤销此过程,并将变量写入 .env 文件

(new \Avris\Dotenv\Dotenv)->save(__DIR__ . '/.env', [
    'FOO' => 'foo',
    'BAR' => 'bar',
]);

或者不保存到文件

$string = (new \Avris\Dotenv\Dotenv)->dump([
    'FOO' => 'foo',
    'BAR' => 'bar',
]);

填充命令

Dotenv 提供了一种简单的方法,根据用户输入和默认值填充您的 .env 文件。

假设您有一个应用程序,其中有两个模块需要一些环境变量:Foo\DatabaseFoo\Mailer。安装 symfony/console 并创建一个扩展 Avris\Dotenv\Command\FillCommand 的命令,提供所有默认值

final class FillCommandImplementation extends \Avris\Dotenv\Command\FillCommand
{
    protected function getDefaults(): iterable
    {
        yield `Foo\Database` => [
            'DB_HOST' => '127.0.0.1',
            'DB_DATABASE' => 'foo',
            'DB_USER' => 'root',
            'DB_PASS' => '',
        ]; 
        yield `Foo\Mailer` => [
            'MAILER_URL' => 'null://',
        ];
    }
}

假设您的 .env 文件如下所示

###> Foo\Database ###
DB_HOST=127.0.0.1
DB_DATABASE=prod
DB_USER=user
###< Foo\Database ###

FOO=bar

缺少 DB_PASSMAILER_URL,并定义了一个额外的变量 FOO

如果您现在 运行该命令,您将被告知 DB_PASSMAILER_URL 应该是什么(提供默认值 ''null://),您提交的值将被放入 .env 文件中,而不会删除 FOO

版权