DotEnv包 - 从vlucas/phpdotenv衍生而来

v2.1.0 2020-12-17 07:13 UTC

This package is auto-updated.

Last update: 2024-09-17 14:58:41 UTC


README

包,可以从多个位置的多个.env文件中加载环境变量

本包是基于vlucas/phpdotenv发布的包衍生而来,增加了一些功能,例如处理多个.env文件和使用类的实例设置变量。

Build Status

安装

使用Composer安装包

composer require sebastiansulinski/dotenv

使用说明

要使用此插件,您至少需要一个.env文件,例如:

// .env

DB_HOST=localhost
DB_NAME=test
DB_USER=user
DB_PASS=password

您在实例化SSD\DotEnv\DotEnv对象时加载所有您的.env文件。

require "vendor/autoload.php";

use SSD\DotEnv\DotEnv;

$dotEnv = new DotEnv(__DIR__ . DIRECTORY_SEPARATOR . '.env');

您可以传递单个.env文件、包含.env.*文件的目录的路径或多个路径/目录。

$dotEnv = new DotEnv(__DIR__ . DIRECTORY_SEPARATOR . '.env');
$dotEnv = new DotEnv(__DIR__);
$dotEnv = new DotEnv(
    __DIR__
    'another/path',
    'another/file/.env'
);

加载变量

加载和处理变量有两种方法:load()overload()

load()方法只会设置尚未存在的变量,而overload()方法会设置所有变量,覆盖任何现有的变量。

$dotEnv = new DotEnv(__DIR__);

// will only set variables
// that are not already set
$dotEnv->load();
$dotEnv = new DotEnv(__DIR__);

// will set all variables from the files
// overwriting any duplicates
$dotEnv->overload();

必需变量

为了确保您的系统具有所有必要的变量,您可以使用required()方法,该方法可以接受单个变量名或必需变量的数组。

$dotEnv = new DotEnv(__DIR__);

// will only set variables
// that are not already set
$dotEnv->load();

// either a single variable
$dotEnv->required('DB_HOST');
$dotEnv = new DotEnv(__DIR__);

// will only set variables
// that are not already set
$dotEnv->load();

// or an array of variables
$dotEnv->required([
    'DB_HOST',
    'DB_NAME',
    'DB_USER',
    'DB_PASS'
]);

如果所需的任何变量在任何一个.env.*文件中不存在,系统将抛出RuntimeException

以数组形式返回.env文件的内容

使用toArray()方法获取.env文件的内容,无论是否设置环境变量。

$dotEnv = new DotEnv(__DIR__);

// will not set environment variables
$variables = $dotEnv->toArray();

var_dump($variables);

// ['DB_HOST' => '127.0.0.1', 'DB_NAME' => 'blog', ...]


// will set environment variables using load() method
$variables = $dotEnv->toArray(DotEnv::LOAD);

var_dump($variables);

// ['DB_HOST' => '127.0.0.1', 'DB_NAME' => 'blog', ...]


// will set environment variables using overload() method
$variables = $dotEnv->toArray(DotEnv::OVERLOAD);

var_dump($variables);

// ['DB_HOST' => '127.0.0.1', 'DB_NAME' => 'blog', ...]

获取存储在变量中的值

您可以使用DotEnv对象的静态get()方法检索存储在给定环境变量中的值。

DotEnv::get('DB_HOST');

当您将字符串truefalse.env文件中的变量关联时,使用DotEnv::get时它们将自动转换为布尔值true / false。对于具有null字符串的变量也适用,它将返回null值。

如果您指定了一个没有关联值的变量(如MY_VARIABLE=),它将返回空字符串''

您可以为get()方法提供第二个参数,如果找不到变量,则返回该参数。默认值可以是scalarClosure类型。

DotEnv::get('DB_HOST', 'localhost');

DotEnv::get('DB_HOST', function() {

    return DotEnv::get('ENVIRONMENT') == 'live' ? 'localhost' : 127.0.0.1;

});

检查是否存在且等于

您可以使用has()方法检查变量是否存在,使用is()方法检查它是否存储了给定的值。

DotEnv::has('NON_EXISTENT_VARIABLE');
// false

DotEnv::is('ENVIRONMENT', 'live')
// true / false

设置变量

$dotEnv = new DotEnv(__DIR__);
$dotEnv->load();
$dotEnv->set('CUSTOM_VARIABLE', 123);
$dotEnv->required('CUSTOM_VARIABLE');

变量引用

如果您想继承变量的值,可以使用${..}括起来的变量名,例如:

MAIL_SMTP=true
MAIL_USER=mail@mail.com
MAIL_PASS=password
MAIL_PORT=587

MAIL_API_KEY=${MAIL_PASS}