abdeslam/envator
Composer 安装命令:
composer require abdeslam/envator
包简介
A fast, flexible and customizable PHP .env loader
关键字:
README 文档
README
Envator is a .env file loader that supports loading multiple files, caching (using psr-16 simple-cache interface) and using filters that enable type casting of booleans, numerics and variables inside values and more ...
Table of contents
Requirements
- PHP 8.0 and above.
Installation
1. Using Composer
You can install the library via Composer.
php composer.phar require abdeslam/envator
or
composer require abdeslam/envator
2. Manually
If you're not using Composer, you can also clone Abdeslam/Envator repository into your directory:
git clone https://github.com/Abdeslam-Gacemi/Envator.git
However, using Composer is recommended as you can easily keep the library up-to-date.
Usage
1. using the class Envator directly
let's assume that's your .env file
APP_NAME=my_awesome_application
in your php code :
<?php use Abdeslam\Envator\Envator; require '/path/to/autoload.php'; $envator = new Envator(); $envator->load('/path/to/.env'); $envator->populate(); echo getenv('APP_NAME'); // output: 'my_awesome_application' echo $_ENV['APP_NAME']; // output: 'my_awesome_application' echo $_SERVER['APP_NAME']; // output: 'my_awesome_application'
loading multiple .env files
<?php use Abdeslam\Envator\Envator; require '/path/to/autoload.php'; $envator = new Envator(); // loading multiple .env files $envator->load('/path/to/.env', '/path/to/another/.env'); $envator->populate();
2. using the factory
<?php use Abdeslam\Envator\EnvatorFactory; require '/path/to/autoload.php'; $envator = new EnvatorFactory::create([ '/path/to/.env' ]); $envator->populate(); echo getenv('APP_NAME'); // output: 'my_awesome_application' echo $_ENV['APP_NAME']; // output: 'my_awesome_application' echo $_SERVER['APP_NAME']; // output: 'my_awesome_application'
3. adding filters
filters allow operating on the the keys and values after the parsing of the .env file. Envator package provide 5 filters and you can add custom ones.
TrimQuotesFilter::class: trims the quotes of the string keys and values.BooleanValuesFilter::class: casts 'true' and 'false' strings to booleans (case insensitive).NumericValueFilter::class: casts numeric string values to integers and floats.EmptyStringToNullFilter::class: casts empty strings '' to NULL.VariableFilter::class: replaces variables inside values (variable must defined before using it inside values). see example below
let's assume that is your .env file :
APP_NAME=my_awesome_application ENVIRONMENT="development" DEBUG=true VERBOSITY_LEVEL=2 DATABASE_USER=user DATABASE_PASSWORD=${DATABASE_USER}1234 EMPTY= EMPTY2
in your php code :
<?php use Abdeslam\Envator\Envator; use Abdeslam\Envator\Filters\TrimQuotesFilter; use Abdeslam\Envator\Filters\BooleanValueFilter; use Abdeslam\Envator\Filters\NumericValueFilter; use Abdeslam\Envator\Filters\VariableFilter; use Abdeslam\Envator\Filters\EmptyStringToNullFilter; require '/path/to/autoload.php'; $envator = new Envator(); $envator->addFilters([ TrimQuotesFilter::class, BooleanValueFilter::class, NumericValueFilter::class, VariableFilter::class, EmptyStringToNullFilter::class ]); $envator->load('/path/to/.env'); $envator->populate(); echo getenv('ENVIRONMENT'); // output: 'development' instead of '"development"' echo $_ENV['DEBUG']; // output: true (boolean) instead of 'true' (string) echo $_ENV['VERBOSITY_LEVEL']; // output: 2 (integer) instead of '2' (string) echo $_SERVER['DATABASE_PASSWORD']; // output: 'user1234' echo getenv('DEBUG'); // output: '1' // getenv() does not support booleans and NULL echo getenv('EMPTY'); // output: '' // getenv() does not support booleans and NULL echo $_ENV['EMPTY']; // output: NULL echo $_SERVER['EMPTY2']; // output: NULL
CAVEATS :
- using getenv() function : it does not support booleans (TRUE and FALSE) and NULL, they get type casted to string : TRUE => '1', FALSE => '', NULL => ''.
4. filters using the factory
the factory loads the default filters 5 automatically, to change this behavior :
<?php use Abdeslam\Envator\EnvatorFactory; require '/path/to/autoload.php'; $envator = EnvatorFactory::create( ['/path/to/.env'], [] // no filter will be loaded );
or
<?php use Abdeslam\Envator\EnvatorFactory; require '/path/to/autoload.php'; $envator = EnvatorFactory::create( ['/path/to/.env'], null // (default value) the default 5 filters will be loaded );
or
<?php use Abdeslam\Envator\EnvatorFactory; use Abdeslam\Envator\Filters\BooleanValueFilter; require '/path/to/autoload.php'; $envator = EnvatorFactory::create( ['/path/to/.env'], // loading needed filters only [BooleanValueFilter::class] );
5. custom filters
A filter must be a class that implements Abdeslam\Envator\Contracts\FilterInterface :
<?php use Abdeslam\Envator\Contracts\FilterInterface; class MyCustomFilter implements FilterInterface { /** * @inheritDoc */ public static function filter(array $oldItems, string $key, $value): array { $prefix = 'MY_PREFIX_'; // the key exists in the items parsed previously // so it will be overwritten // we add a prefix to the key if (array_key_exists($key, $oldItems)) { $key = $prefix . $key; } return ['key' => $key, 'value' => $value]; } }
if we take this .env variables for example :
USERNAME=user
USERNAME=admin
<?php use Abdeslam\Envator\EnvatorFactory; use MyCustomFilter; require '/path/to/autoload.php'; $envator = EnvatorFactory::create( ['/path/to/.env'], // loading needed filters [MyCustomFilter::class] ); $envator->populate(); echo getenv('USERNAME'); // output : 'user' echo getenv('MY_PREFIX_USERNAME'); // output : 'admin'
6. options
when populating the variables to the environment, you can specify what way the variables are populated by passing an array as an argument to Envator::populate() method :
<?php use Abdeslam\Envator\EnvatorFactory; require '/path/to/autoload.php'; $envator = EnvatorFactory::create(['/path/to/.env']); // populate the variables to the super global $_ENV only $envator->populate([ Envator::GLOBAL_ENV => true, Envator::PUT_ENV => false, // populate using putenv() function (risky) Envator::APACHE => false, // populates using apache_setenv() (for apache environment) Envator::SERVER => false // populates to the super global $_SERVER ]); /** * the default configuration : * [ * Envator::GLOBAL_ENV => true, * Envator::PUT_ENV => true, * Envator::APACHE => false, * Envator::SERVER => true, * ] */
7. caching
Envator support any implementation of psr-16 (simple-cache), and provides a default one :
<?php use Abdeslam\Envator\Envator; require '/path/to/autoload.php'; // instantiating the cache manager providing the directory to use for caching $cacheManager = new CacheManager(__DIR__); $envator = new Envator(); // setting a cache manager enables the cache automatically $envator->setCacheManager($cacheManager); $envator->load('/path/to/.env')->populate();
or
<?php use Abdeslam\Envator\EnvatorFactory; require '/path/to/autoload.php'; $envator = EnvatorFactory::create( ['/path/to/.env'], null, __DIR__ // cache directory ); $envator->populate();
Customization
- Creating a custom .env files Resolver and Parser classes, they must implement
Abdeslam\Envator\ResolverInterfaceandAbdeslam\Envator\ParserInterface.
<?php use Abdeslam\Envator\Envator; require '/path/to/autoload.php'; $resolver = new MyCustomResolver(); $parser = new MyCustomParser(); $envator = new Envator($resolver, $parser);
Made with love ❤️
abdeslam/envator 适用场景与选型建议
abdeslam/envator 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 12 次下载、GitHub Stars 达 1, 最近一次更新时间为 2021 年 06 月 27 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「env」 「dotenv」 「.env」 「env loader」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 abdeslam/envator 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 abdeslam/envator 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 abdeslam/envator 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
An environment variable convenience library extension for vlucas/phpdotenv
Laravel dotenv manager
Utils to load, parse and work with configuration on Mezzio projects
Env builder is a package which collects different env files within a specified directory and compiles them into one single .env file, useful when you have different .env files laying around in different folders and you want to have one single big file that you can load with Symfony's DotEnv loader o
.env file handler
Alfabank REST API integration
统计信息
- 总下载量: 12
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 1
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-06-27