linkorb / envoi
环境变量强化版
Requires
- php: ^7.1 || ^8.0
- symfony/console: ^3.0|^4.0|^5.0|^6.0
- symfony/dotenv: ^3.0|^4.0|^5.0|^6.0
- symfony/yaml: ^3.0|^4.0|^5.0|^6.0
Requires (Dev)
- phpunit/phpunit: ^8
README
envoi
Envoi旨在简化PHP应用程序中环境变量(env vars)的使用和文档。
Envoi功能
-
一个Yaml模式来描述可能用于配置应用程序的env vars
-
工具来验证env vars与模式
-
一个帮助填充
.env
文件的工具 -
一个将模式转换为markdown的工具
Envoi提供了一个控制台命令,用于根据模式(惯例为.env.yaml
)验证.env
文件。它还提供了检查器,在应用程序启动阶段早期调用,将阻止没有完整和有效环境变量集的应用程序。
安装
composer require linkorb/envoi
使用
Env检查器
检查器应在应用程序生命周期的早期尽可能早地调用。理想的时间是在环境变量被填充后立即。例如,在一个基于Symfony的应用中,检查器应该在Dotenv组件从各种.env*
文件加载环境变量之后立即调用。
<?php // config/bootstrap.php use Envoi\EnvChecker; use Symfony\Component\Dotenv\Dotenv; require dirname(__DIR__).'/vendor/autoload.php'; (new Dotenv(false))->loadEnv(dirname(__DIR__).'/.env'); // check the env! (new EnvChecker())->check(dirname(__DIR__).'/.env.yaml');
当发现无效的环境变量时,检查器会抛出异常以停止应用程序。验证错误列表包含在异常消息中。
EnvChecker
将环境视为不可变:它验证环境变量,但不修改它们。MutableEnvChecker
验证环境变量并可以转换值,使其成为利用Envoi的各种环境变量转换功能的理想检查器。
插值
在.env
文件中将一个变量基于另一个变量分配
FOO="foo" BAR="{FOO}/logs"
元数据环境示例.env.yaml
支持类型:int
,string
,url
,path
FOO: description: Used to configure foo system type: url default: "https://username:password@example.com/bla" required: true QUX: description: path to qux files type: path example: "some example value" make-absolute-path: true # "Expands relative paths to absolute paths (i.e. ~/qux becomes /home/joe/qux) BAR: description: Used for bar things type: string options: RED,GREEN,BLUE # validates that input is one of the available options
从.env
初始化环境变量
Envoi::init(); $foo = getenv('FOO');
CLI
./vendor/bin/envoi
可用命令
validate
根据元文件.env.yaml
进行验证。
configure
CLI向导,根据.env.yaml
询问和更新.env文件。
markdown
输出GitHub Flavored Markdown文档,其中包含可用变量。在文件中查找<!-- envoi start -->
和<!-- envoi end -->
标签(默认为README.md),并在这些标签之间插入/更新生成的markdown。
运行测试
./vendor/bin/phpunit
贡献
我们欢迎贡献来使这个存储库更加完善。无论是修复错误、添加功能还是改进文档,您的帮助都将受到高度赞赏。要开始,请fork此存储库然后克隆您的fork。
在提交任何更改之前,请确保熟悉LinkORB的贡献指南,了解我们的提交、分支和拉取请求的标准,以及我们的行为准则。
如果您无法自己实现您喜欢的更改,请不要犹豫,打开一个新的问题报告,以便我们或其他人可以处理它。
由LinkORB工程团队提供
查看我们在linkorb.com/engineering的其他项目。顺便说一句,我们在招聘!