要将现有的Symfony 2.8项目迁移到Symfony 3.4,我首先设置了一个新的Symfony 3.4项目。
将我的捆绑软件添加到新项目中之后,Symfony在AppKernel.php中抛出ClassNotFoundException
ClassNotFoundException
试图从名称空间加载类“ MyBundle” “名称空间\ MyBundle”。您是否忘记了另一个的“使用”声明 命名空间?在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"
]
},
但是,虽然这可以解决问题,但我想知道与使用"" : "src/"
相比,包含具体捆绑商品有什么好处。
这种方法的缺点很明显:添加新捆绑包时,还有一个地方需要指定它。
优势是什么?最好添加每个捆绑软件,还是我可以继续使用"" : "src/"
?