Чтобы перенести существующий проект Symfony 2.8 в Symfony 3.4, я сначала настроил новый проект Symfony 3.4.
После добавления моих пакетов в новый проект Symfony выдает ClassNotFoundException
в AppKernel.php
ClassNotFoundException
Попытка загрузить класс "MyBundle" из пространства имен "Namespace \ 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"
]
},
Однако, хотя это решает проблему, мне интересно, в чем преимущество включения бетонных комплектовсверх использования "" : "src/"
.
Недостаток этого подхода довольно очевиден: при добавлении нового пакета есть еще одно место, где я должен его указать.
В чем преимущество?Лучше добавить каждый пакет или я просто продолжаю использовать "" : "src/"
?