Symfony 4自定义Bundle经Composer引入后自动加载失败求助
嘿,我一眼就看出问题出在命名空间和Composer自动加载配置不匹配上了,咱们一步步搞定它:
核心错误:自制Bundle的Composer自动加载配置与实际类的命名空间不匹配
你自制Bundle的composer.json里的autoload配置是:"autoload" : { "psr-4" : { "myusername\\MyBundle\\" : "" } }但你的
MyBundle.php里的命名空间是My\Bundle\MyBundle,这完全对不上!Composer按照前者的配置去寻找myusername\MyBundle下的类,自然找不到My\Bundle\MyBundle\MyBundle这个类。第一步:修正自制Bundle的
composer.json
把autoload部分改成和实际命名空间匹配的配置:"autoload" : { "psr-4" : { "My\\Bundle\\MyBundle\\" : "" } }这里的逻辑是:PSR-4规则要求,命名空间前缀
My\\Bundle\\MyBundle\\对应的文件目录是Bundle的根目录(用""表示),刚好你的MyBundle.php就在根目录,DependencyInjection/MyExtension.php的命名空间是My\Bundle\MyBundle\DependencyInjection,路径也完全对应。第二步:更新依赖并重新生成自动加载
在你的Symfony主项目根目录下执行以下命令:composer update myusername/my-bundle composer dump-autoload -o第一条命令会重新拉取修正后的Bundle配置,第二条命令强制生成优化后的自动加载映射,确保Composer能正确找到你的Bundle类。
验证bundles.php配置
你当前bundles.php里的配置是正确的:My\Bundle\MyBundle\MyBundle::class => ['dev' => true, 'test' => true]不需要修改这部分。
做完这些步骤,那个ClassNotFoundException应该就消失了,本质就是自动加载的映射路径和实际类的命名空间没对齐,修正后就没问题啦!
内容的提问来源于stack exchange,提问作者Gianluca78

