我是否需要手动将每个生成的包附加到composer.json?

时间:2017-07-16 08:53:52

标签: symfony

我开始学习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文件中附加新生成的包)?

1 个答案:

答案 0 :(得分:1)

是。这就是为什么你通常有一个名称空间的原因。例如,您的名称或公司的缩写。这样,您只需为src文件夹添加该命名空间,并且所有包都会自动“找到”。

示例:

{
  ...
  "autoload": {
        "psr-4": {
            "Acme\\": "src"
         },
  }
  ...
}

当然,您的捆绑包需要使用该命名空间,例如:

namespace Acme\BlogBundle;

class BlogBundle {
}