为了将现有的Symfony 2.8项目迁移到Symfony 3.4,我首先 Build 了一个新的Symfony 3.4项目 .
将我的软件包添加到新项目后,Symfony会在AppKernel.php中抛出一个 ClassNotFoundException
ClassNotFoundException尝试从命名空间“Namespace \ MyBundle”加载类“MyBundle” . 您是否忘记了另一个命名空间的“use”语句?在AppKernel.php中(第17行)
我发现了这个问题的几个问题和答案,解决方案非常简单:
// Symfony 2.8 composer.json
...
"autoload" : {
"psr-0" : {
"" : "src/"
}
},
// Symfony 3.4 composer.json
...
"autoload": {
"psr-4": {
"AppBundle\\": "src/AppBundle"
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php"
]
},
由于Symfony 3.4不再定义 "" : "src/"
,但包含具有 "AppBundle\\": "src/AppBundle"
的具体包,解决方案是在此处添加我的包:
"autoload": {
"psr-4": {
"AppBundle\\": "src/AppBundle",
"MyBundle\\": "src/MyBundle"
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php"
]
},
However, while this fixes the problem I wonder what is the advantage of including concrete bundles over using "" : "src/".
这种方法的缺点是非常明显的:当添加一个新的bundle时,我还有一个地方需要指定它 .
What is the advantage? Is it better to add each bundle or can I simply keep using "" : "src/"?