大麦食品 / envy
v0.1.1
2019-10-30 02:27 UTC
Requires
- php: >=7.3
- nette/utils: ^2.5@dev || ^3.0@dev
Requires (Dev)
- damejidlo/coding-standard: ^1.1
- damejidlo/phpstan-nette-tester: ^0.1.0
- jakub-onderka/php-parallel-lint: ^1.0
- nette/bootstrap: ^2.4.6 || ^3.0
- nette/di: ^2.4.10@dev || ^3.0.1@dev
- nette/tester: ^2.3
- pepakriz/phpstan-exception-rules: ^0.8.1
- phpstan/phpstan-nette: ^0.11
- phpstan/phpstan-shim: ^0.11.19
- phpstan/phpstan-strict-rules: ^0.11.1
Suggests
- nette/di: for integration with Nette DI container
This package is auto-updated.
Last update: 2020-01-15 19:49:23 UTC
README
安装
$ composer require damejidlo/envy
基本用法
创建 Envy 实例
use Damejidlo\Envy\Envy; use Damejidlo\Envy\LoaderFactory; use Damejidlo\Envy\ValueProviders\Reader; $reader = new Reader(); $loaderFactory = new LoaderFactory($reader); $envy = new Envy($reader, $loaderFactory);
Envy
支持多种方法从环境变量中加载最常见的数据类型。在加载值时,首先进行验证(对于无效输入抛出异常),然后进行类型转换。
字符串值
// Get string from `FOO` env variable, or throw exception if not set $envy->getString('FOO'); // Get string from `FOO` env variable, or return `'default'` if not set $envy->getString('FOO', 'default'); // Get string from `FOO` env variable, or return `NULL` if not set $envy->getStringOrNull('FOO');
布尔值
布尔值的表示方式有多种:true
/false
、yes
/no
、1
/0
(全部不区分大小写)。
// Get boolean from `FOO` env variable, or throw exception if not set $envy->getBool('FOO'); // Get boolean from `FOO` env variable, or return `FALSE` if not set $envy->getBool('FOO', FALSE); // Get boolean from `FOO` env variable, or return `NULL` if not set $envy->getBoolOrNull('FOO');
整数值
// Get integer from `FOO` env variable, or throw exception if not set $envy->getInt('FOO'); // Get integer from `FOO` env variable, or return `42` if not set $envy->getInt('FOO', 42); // Get integer from `FOO` env variable, or return `NULL` if not set $envy->getIntOrNull('FOO');
浮点值
// Get float from `FOO` env variable, or throw exception if not set $envy->getFloat('FOO'); // Get float from `FOO` env variable, or return `3.1415` if not set $envy->getFloat('FOO', 3.1415); // Get float from `FOO` env variable, or return `NULL` if not set $envy->getFloatOrNull('FOO');
数组
默认项分隔符 ~\s*,\s*~
用于分割项。
字符串值列表
// Get array of string from `FOO` env variable, or throw exception if not set $envy->getStringArray('FOO'); // Get array of strings from `FOO` env variable, or return `['foo']` if not set $envy->getStringArray('FOO', ['foo']); // Get array of strings from `FOO` env variable, or return `NULL` if not set $envy->getStringArrayOrNull('FOO');
整数值列表
// Get array of integer from `FOO` env variable, or throw exception if not set $envy->getIntArray('FOO'); // Get array of integers from `FOO` env variable, or return `[42]` if not set $envy->getIntArray('FOO', [42]); // Get array of integers from `FOO` env variable, or return `NULL` if not set $envy->getIntArrayOrNull('FOO');
浮点值列表
// Get array of float from `FOO` env variable, or throw exception if not set $envy->getFloatArray('FOO'); // Get array of float from `FOO` env variable, or return `[3.1415]` if not set $envy->getFloatArray('FOO', [3.1415]); // Get array of float from `FOO` env variable, or return `NULL` if not set $envy->getFloatArrayOrNull('FOO');
Nette DI 集成
在配置中注册扩展,这将在你的 DI 容器中注册必要的服务
extensions: envy: Damejidlo\Envy\DI\EnvyExtension
现在可以使用简写符号来访问 Envy
方法
parameters: loadedFromEnvVariables: foo: @envy::getString('FOO') bar: @envy::getIntArray('FOO', [1, 1, 2, 3, 5, 8, 13]) services: - type: MyService arguments: foo: %loadedFromEnvVariables.foo% bar: %loadedFromEnvVariables.bar%
自定义加载器
你可以创建自己的加载器,以完全自定义加载值的处理,例如。
use Damejidlo\Envy\LoaderFactory; use Damejidlo\Envy\ValueProviders\Reader; $reader = new Reader(); $loaderFactory = new LoaderFactory($reader); $defaultValue = ['https://example.com']; // Processor that will split items on semicolon and validate every item contains valid URL $arrayProcessor = (new ArrayProcessor()) ->withDelimiter('~;~') ->withItemValidator('url'); $loader = $loaderFactory->createLoader() ->withAddedProcessor($arrayProcessor) ->withValidator('array:1..') // make sure we're loading non-empty array ->withFallback($defaultValue); // Get non-empty list of URLs from `FOO_URLS` env variable, or `$defaultValue` if not set $urls = $loader->get('FOO_URLS');
如果默认的处理器集合没有覆盖你的用例,你可以通过实现 ProcessorInterface
来编写自己的处理器。
验证
验证建立在 Nette\Utils\Validators
之上 - 你可以验证任何 Nette 支持的类型。