nbgrp / env-bundle
该包提供了一些有用的自定义 Symfony 环境变量处理器
v3.0.0
2024-01-05 11:56 UTC
Requires
- php: ^8.2
- ext-filter: *
- symfony/config: ^7
- symfony/dependency-injection: ^7
- symfony/http-kernel: ^7
Requires (Dev)
- roave/security-advisories: dev-latest
- symfony/phpunit-bridge: ^7
README
概述
该包提供了一些有用的自定义 Symfony 环境变量处理器
- Array Cast 处理器用于数组值类型转换。
- CSV 处理器具有可定制的分隔符。
安装 / 配置
composer require nbgrp/env-bundle
在 config/bundles.php
中启用该包
return [ // ... NbGroup\Symfony\NbgroupEnvBundle::class => ['all' => true], ];
默认情况下,所有环境变量处理器均被禁用。您应通过包配置显式启用所需的处理器。
YAML 配置示例
# config/packages/nbgroup_env.yaml nbgroup_env: array_cast: true # enable Array Cast processor csv: # enable CSV processor dot: '.' # csv-dot will parse env value into array with "." as a separator colon: ':' # csv-colon will parse env value into array with ":" as a separator
PHP 配置示例(适用于 Symfony 5+)
// config/packages/nbgroup_env.php return static function (Symfony\Config\NbgroupEnvConfig $config): void { $config->arrayCast() ->enabled(true) ; $config->csv() ->enabled(true) ->delimiter('dot', '.') ->delimiter('colon', ':') ; };
处理器
ArrayCastEnvVarProcessor
将环境变量值类型转换为支持的类型之一
- bool
- int
- float
- string
nb: 如果 CSV 值不是数组,它将被转换为数组。
示例
# config/services.yaml parameters: env(CSV_BOOL_ENV): '1,0,no,"true"' env(CSV_INT_ENV): '1,"2","3"' env(JSON_FLOAT_ENV): '{"key1": 1.1,"key2": "2.2"}' env(JSON_STRING_ENV): '["foo", "foo \"bar\"", ""]' ... bools: '%env(bool-array:csv:CSV_BOOL_ENV)%' # will contains [true, false, false, true] ints: '%env(int-array:csv:CSV_INT_ENV)%' # will contains [1, 2, 3] floats: '%env(float-array:json:JSON_FLOAT_ENV)%' # will contains ['key1' => 1.1, 'key2' => 2.2] strings: '%env(string-array:json:JSON_STRING_ENV)%' # will contains ['foo', 'foo "bar"', '']
CsvEnvVarProcessor
将环境变量值解析为数组。与内置的 csv
处理器不同,此处理器支持自定义分隔符。
要使用 CSV 处理器,它应该被配置:请参阅 配置示例 了解如何指定可用分隔符(以及环境前缀)。
nb: 不要使用反斜杠
\
转义双引号"
封装字符(在 PHP ^7.4 上将不起作用)。要转义"
,只需写两次。
示例
# config/packages/nbgroup_env.yaml nbgroup_env: csv: semi: ';' # config/services.yaml parameters: env(CSV_SEMICOLON_ENV): 'Alice;alice@mail.me' ... person: '%env(csv-semi:CSV_SEMICOLON_ENV)%' # will contains ['Alice', 'alice@mail.me']