Symfony使用PHP配置文件导入文件时出现路径错误问题
Symfony从services.yaml转services.php后路径错误问题
原正常工作的services.yaml配置
imports: - { resource: '../src/**/di.php' } services: _defaults: autowire: true autoconfigure: true App\: resource: '../src/' exclude: - '../src/**/di.php' - '../src/**/Entity/' - '../src/**/Model/' - '../src/Authorization/AuthorizationProcessor/' - '../src/Kernel.php'
转换后的services.php配置(出现错误)
<?php return static function (ContainerConfigurator $di): void { $di->import('../src/**/di.php'); $services = $di->services() ->defaults() ->autowire() ->autoconfigure(); $services->load('App\\', '../src/') ->exclude([ '../src/**/di.php', '../src/**/Entity/', '../src/**/Model/', '../src/Authorization/AuthorizationProcessor/', '../src/Kernel.php', ]); };
错误信息
文件"../src"不存在(位于:
"/var/www/app/src/Authorization/AuthorizationProcessor"),位于
/var/www/app/config/services.php(从"/var/www/app/src/Kernel.php"导入)。
问题原因与解决方案
问题出在exclude路径的解析逻辑差异:
- YAML配置中,
exclude的路径是相对于配置文件所在的config目录解析的; - PHP配置中,
exclude的路径是相对于load()方法指定的resource路径(即../src/,对应实际路径/var/www/app/src/)解析的。
你的PHP配置里,exclude中的../src/**/di.php相对于/var/www/app/src/会被解析为/var/www/src/**/di.php,这个路径不存在,因此报错。
修改PHP配置的exclude数组,去掉路径前的../src/,改用相对于src目录的路径:
<?php return static function (ContainerConfigurator $di): void { $di->import('../src/**/di.php'); $services = $di->services() ->defaults() ->autowire() ->autoconfigure(); $services->load('App\\', '../src/') ->exclude([ '**/di.php', '**/Entity/', '**/Model/', 'Authorization/AuthorizationProcessor/', 'Kernel.php', ]); };
这样修改后,exclude的路径会正确匹配src目录下的对应文件和目录,配置即可正常工作。
内容的提问来源于stack exchange,提问作者pepper
相关产品推荐
相关产品推荐

