我开始学习Symfony,我正在学习一些没有任何相关内容的教程:
当我使用symfony安装程序创建一个新项目并运行composer install
然后php app/console server:start
时,我可以在浏览器中打开该项目。
BUT!当我使用命令php app/console generate:bundle
创建一个新包时,我收到以下错误消息:
PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\ClassNotFoundException: Attempted to load class "BlogBundle" from namespace "BlogBundle".
Did you forget a "use" statement for another namespace? in /home/user/Symfony/myapp/app/AppKernel.php:19
然后我需要转到我的composer.json文件并在AppBundle之后附加我新生成的包
{
"name": "user/myapp",
"license": "proprietary",
"type": "project",
"autoload": {
"psr-4": {
"AppBundle\\": "src/AppBundle",
"BlogBundle\\": "src/BlogBundle" // <-- this is the new appended one
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php"
]
},
..........
然后当我尝试再次启动服务器时,它可以工作,并在浏览器中显示Hello world。
所以问题是每次都必须这样做(在composer.json文件中附加新生成的包)?
答案 0 :(得分:1)
是。这就是为什么你通常有一个名称空间的原因。例如,您的名称或公司的缩写。这样,您只需为src
文件夹添加该命名空间,并且所有包都会自动“找到”。
示例:
{
...
"autoload": {
"psr-4": {
"Acme\\": "src"
},
}
...
}
当然,您的捆绑包需要使用该命名空间,例如:
namespace Acme\BlogBundle;
class BlogBundle {
}