linkorb/envoi

环境变量强化版

v1.8.2 2022-10-06 11:40 UTC

This package is auto-updated.

Last update: 2024-08-26 15:30:12 UTC


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支持类型:intstringurlpath

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的其他项目。顺便说一句,我们在招聘!