Symfony文件环境变量处理器在控制台命令中失效问题
解决Symfony服务在控制器和控制台命令中路径不一致的问题
核心问题是相对路径依赖于当前执行环境的工作目录:
- Web请求时,服务器工作目录通常是
public/,../auth.json指向项目根目录的配置文件 - 在项目根目录执行控制台命令时,当前工作目录是根目录,
../auth.json会指向根目录的上级目录,导致文件找不到
通用解决方案:使用项目根目录构建绝对路径
利用Symfony内置的kernel.project_dir参数(始终指向项目根目录),修改配置以消除工作目录差异:
- 更新
parameters配置,用项目根目录拼接配置文件路径:
parameters: env(LDAP_CONFIG_FILE): '%kernel.project_dir%/auth.json'
- 服务注入配置保持不变:
services: # 其他配置... App\Service\Authenticator: arguments: $config: '%env(json:file:resolve:LDAP_CONFIG_FILE)%' $environment: '%env(APP_ENV)%'
原理说明
kernel.project_dir是Symfony内核提供的内置参数,无论当前工作目录是public/(Web请求)还是项目根目录/bin/(控制台命令),它都会准确指向项目根目录。通过它拼接的配置文件路径会被json:file:resolve处理器解析为绝对路径,确保在任何环境下都能找到正确的文件。
内容的提问来源于stack exchange,提问作者redheness
相关产品推荐
相关产品推荐

