sebastiansulinski / dotenv
DotEnv包 - 从vlucas/phpdotenv衍生而来
Requires
- php: ^7.1 || ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.3
README
包,可以从多个位置的多个.env文件中加载环境变量
本包是基于vlucas/phpdotenv发布的包衍生而来,增加了一些功能,例如处理多个.env文件和使用类的实例设置变量。
安装
使用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');
当您将字符串true
、false
与.env
文件中的变量关联时,使用DotEnv::get
时它们将自动转换为布尔值true
/ false
。对于具有null
字符串的变量也适用,它将返回null
值。
如果您指定了一个没有关联值的变量(如MY_VARIABLE=
),它将返回空字符串''
。
您可以为get()
方法提供第二个参数,如果找不到变量,则返回该参数。默认值可以是scalar
或Closure
类型。
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}