Php Symfony3 ClassNotFoundException创建包后发生异常

Php Symfony3 ClassNotFoundException创建包后发生异常,php,symfony,exception,Php,Symfony,Exception,我想在Symfony启动一个新的3.3项目,并像往常一样开始: 1.)创建新项目:symfony新艺术项目 2.)创建新捆绑包:php应用程序/控制台生成:捆绑包(Paul/ArtBundle,yml,src/) 然后我运行本地服务器,当我打开127.0.0.1:8000时,我得到了一条漂亮的消息: (1/1)ClassNotFoundException 试图从命名空间加载类“PaulArtBundle” “Paul\ArtBundle”。你忘了另一个的“使用”语句了吗 名称空间?在AppKer

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

1.)创建新项目:
symfony新艺术项目

2.)创建新捆绑包:
php应用程序/控制台生成:捆绑包
(Paul/ArtBundle,yml,src/)

然后我运行本地服务器,当我打开127.0.0.1:8000时,我得到了一条漂亮的消息:

(1/1)ClassNotFoundException

试图从命名空间加载类“PaulArtBundle” “Paul\ArtBundle”。你忘了另一个的“使用”语句了吗 名称空间?在AppKernel.php中(第19行)

这很奇怪,我还不明白为什么会发生这种情况。在创建包之前,没有错误;我看到了symfony的典型起始页

public function registerBundles()
{
    $bundles = [
        new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
        ......
        new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
        new AppBundle\AppBundle(),
        new Paul\ArtBundle\PaulArtBundle(),
    ];
}


我刚刚安装了一个S3.3.4的新版本(撰写本文时的最新版本),使用:

刷新了浏览器,果然收到了“找不到类”消息

当引入新名称空间时,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" ]
},
然后跑

composer dumpautoload
然后重新启动服务器(可能)。这将修复bundle类未找到的问题

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

顺便说一句,当我刷新浏览器时,我看到了“Hello World”,这让我有点吃惊。新的包覆盖了/route,这也有点特殊

如果有人想知道为什么会发生这种情况,Symfony 3.2从

#composer.json
"psr-4": { "": "src/" },
To
"psr-4": { "AppBundle\\": "src/AppBundle" },
尽管我认为拼写单个名称空间可能“更好”,但您可以随时将其更改回原来的名称空间。不确定

下面是一个更详细的问题:


看起来维修人员倾向于稍微提高速度,而不是破坏现有命令。哦,好吧。Symfony Flex应该能让一切再次变得伟大。

如果您生成一个捆绑包,以便在多个项目中使用(具有自己的命名空间),则需要将其添加到
composer.json中,如下所示:

假设您的bundle名称为
CompanyFooBundle
,名称空间为
Company\bundle\FooBundle
,那么composer autoload部分应该如下所示:

...
"autoload": {
    "psr-4": {
        "Company\\Bundle\\FooBundle\\": "src/Company/Bundle/FooBundle"
    },
    "classmap": [
        "app/AppKernel.php",
        "app/AppCache.php"
    ]
},
...
这在以下方面对我有效:

使用生成您的捆绑包

/控制台生成:bundle

并一如既往地按照步骤操作,现在,在composer.json文件中使用以下行执行所需操作

"AppBundle\\": "src/AppBundle"
替换为“
”:“src/”
或添加您的捆绑包,例如:
“BackendBundle\\”:“src/BackendBundle”

这是新的部分

  • 在bin目录中安装composer,从中复制并粘贴步骤

  • 在项目目录中升级一级,并在(项目的)根文件夹中运行下一个命令


  • php./bin/composer.phar更新

    删除
    供应商
    目录并再次运行
    composer安装
    帮助我解决了同样的问题。

    检查AppKernel.php,是否正确?@SamJanssens是,我还可以从kernelDid跳转到我的IDE中的php文件。您是否注册了新的Bundle@Appkernel.php文件?很明显,在某个地方出现了名称空间问题,但在那里……似乎出现了大量的这些问题。检查composer.json文件的“自动加载”部分:最新版本可能有问题。是的,重新启动服务器后工作正常。塔恩克斯:)那里的工作真棒。谢谢你的回答。我花了好几天的时间来解决这个问题。我刚刚发布了这个问题,你把它标记为重复的,是的,这个问题非常相似,只是我从2.8.9到2.8.24(其中psr-4条目已经不同了)除了
    composer dumpautoload
    这一行之外,我还按照这里的指示做了什么,正如我在问题中提到的,你能指出一个解决方法吗?谢谢,你让我开心了@如果需要,您可以将psr4行更改回{“”:“src/”}。性能略有下降,但还不足以引起注意。感谢“Company\\Bundle\\FooBundle\”,我的错误是:“CompanyBundleFooBundle\”
    ...
    "autoload": {
        "psr-4": {
            "Company\\Bundle\\FooBundle\\": "src/Company/Bundle/FooBundle"
        },
        "classmap": [
            "app/AppKernel.php",
            "app/AppCache.php"
        ]
    },
    ...
    
    "AppBundle\\": "src/AppBundle"