创建包后Symfony3 ClassNotFoundException

pgu*_*how 30 php exception symfony

我想在Symfony开始一个新的3.3项目并像往常一样开始:

1.)创建新项目: symfony new ArtProject

2.)创建一个新的Bundle :( php app/console generate:bundlePaul/ArtBundle,yml,src /)

然后我运行本地服务器,当我打开127.0.0.1:8000时,我得到了这个美丽的信息:

(1/1)ClassNotFoundException

尝试从命名空间"Paul\ArtBundle"加载类"PaulArtBundle".您是否忘记了另一个命名空间的"use"语句?在AppKernel.php中(第19行)

这很奇怪,我还没弄清楚到目前为止发生这种情况的原因.在创建Bundle之前,没有错误; 我看到了symfony的典型起始.

public function registerBundles()
{
    $bundles = [
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        ......
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new AppBundle\AppBundle(),
        new Paul\ArtBundle\PaulArtBundle(),
    ];
}
Run Code Online (Sandbox Code Playgroud)
<?php

namespace Paul\ArtBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class PaulArtBundle extends Bundle
{
}
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?我没有更改任何东西,我只运行这些命令.

Cer*_*rad 67

我刚刚安装了S3.3.4的新副本(截至本文撰写时的最新版本):

composer create-project symfony/framework-standard-edition s334 "3.3.4"
bin/console generate:bundle
Share across multiple apps: yes
namespace: Paul\ArtBundle
bundle name: PaulArtBundle
Target Directory: src/
Run Code Online (Sandbox Code Playgroud)

刷新浏览器,果然我得到了类未找到的消息.

当引入新的命名空间时,generate:bundle命令不会更新composer.json的autload部分.编辑composer.json并:

# composer.json
"autoload": {
    "psr-4": {
        "AppBundle\\": "src/AppBundle",
        "Paul\\": "src/Paul"
    },
    "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
},
Run Code Online (Sandbox Code Playgroud)

然后跑

composer dumpautoload
Run Code Online (Sandbox Code Playgroud)

然后重启服务器(可能).这应该修复bundle类未找到的问题.

我没有使用generate:bundle命令已经有一段时间了,因为标准是将所有内容放在AppBundle之下所以我不知道这已经"破坏"了多久.但在过去一周左右至少有三个问题表明这是近期的事情.

顺便说一句,当我刷新浏览器时,我得到了"Hello World",它让我有点兴奋.原来这个新的包覆盖了/ route,这也很特别.

如果有人想知道为什么会这样,Symfony 3.2改变了

#composer.json
"psr-4": { "": "src/" },
To
"psr-4": { "AppBundle\\": "src/AppBundle" },
Run Code Online (Sandbox Code Playgroud)

您可以随时更改它,但我认为拼写出单个命名空间可能会"更好".不确定.

这是一个更详细的问题:https://github.com/symfony/symfony-standard/issues/1098

看起来维护人员比打破现有命令更有利于提高速度.那好吧.Symfony Flex应该让一切变得更好.

  • @MiracleJohnson-如果需要,您可以将psr4行改回{“”:“ src /”}。性能稍有下降,但不足以引起注意。 (2认同)