arthem / config-file-bundle
将环境变量中的文件注入到您的 Symfony 配置中
0.0.1
2023-04-14 13:06 UTC
Requires
- php: ^8.1
- symfony/config: ^4 || ^5 || ^6
- symfony/dependency-injection: ^4 || ^5 || ^6
- symfony/http-kernel: ^4 || ^5 || ^6
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.16
- phpstan/phpstan: ^1.10
README
动机
在 Symfony 配置中,您可以使用 env(file:FOO)
语法将文件内容作为参数注入
但是,一些 Symfony 扩展期望您提供文件路径,而您的基础设施只能提供环境变量。在某些 Docker 部署中,挂载文件非常复杂,而处理环境变量则更简单。
此扩展会生成包含您的环境变量的缓存文件,允许您编写模板。
让我们看看一个 Docker 示例!
# docker-compose.yaml services: symfony-app: environments: - JWT_PRIVATE_KEY
Docker Compose 的默认环境变量可能看起来像这样
# .env JWT_PRIVATE_KEY="-----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCN/VTNk1Sdr9mg ... tDMMHT4ch+pSmyyndMSeu+I+pjF5+cour3FrmmzZFzKivzj0EXbcb+LPUQKBgHWA WRv4Q33WAa3BFKqCZOKhfFY= -----END PRIVATE KEY----- "
您有一个需要 private_key_file
(是的,一个文件路径!)的 jwt_provider
扩展
# config/packages/jwt_provider.yaml jwt_provider: private_key_file: "I don't have file, just a JWT_PRIVATE_KEY env var"
这就是扩展帮您解决的地方!
安装
composer require arthem/config-file-bundle
用法
内联配置
您可以使用以下语法直接编写文件的预期内容
param_value: | &file:<filename.ext> <content of your file>
示例
# config/packages/jwt_provider.yaml jwt_provider: private_key_file: | &file:jwt_private_key.pem %env(JWT_PRIVATE_KEY)%
这将
- 在项目缓存目录中生成
jwt_private_key-%hash%.pem
文件。(%hash%
代表文件内容的解析结果) - 将配置编译为
# config/packages/jwt_provider.yaml jwt_provider: private_key_file: 'cache/dir/jwt_private_key-c131d7b5c6bd917a83e0cbea6296bf95.pem'
预配配置
生成文件的另一种方法是定义它们在扩展配置中
# config/packages/arthem_config_file.yaml arthem_config_file: files: service_account: extension: json content: | { "type": "service_account", "project_id": "my-project", "private_key_id": "%env(json_string:SERVICE_ACCOUNT_ID)%", "private_key": "%env(json_string:SERVICE_ACCOUNT_PRIVATE_KEY)%" } jwt_private_key: extension: pem content: '%env(JWT_SECRET_KEY)%' jwt_public_key: extension: pem content: '%env(JWT_PUBLIC_KEY)%'
然后在您的配置中注入文件
# config/packages/jwt_provider.yaml jwt_provider: private_key_file: '%arthem_config_file.file.jwt_public_key%'
文件内容
转义值
此扩展还提供了其 JSON 环境变量处理器
{ "private_key_id": "%env(json_string:SERVICE_ACCOUNT_PRIVATE_KEY)%" }
此处理器对 JSON 字符串进行转义,这在处理多行环境变量时很有用。