创build包之后出现Symfony3 ClassNotFoundException

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

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

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

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

(1/1)ClassNotFoundException

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

这是奇怪的,我还没有弄清楚为什么会发生这样的事情。 在创buildBundle之前,没有错误; 我看到了symfony的典型首页。

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

 <?php namespace Paul\ArtBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class PaulArtBundle extends Bundle { } 

任何想法发生了什么? 我没有改变什么,我只是跑这些命令。

我刚安装了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/ 

刷新浏览器,果然我得到了类未find消息。

引入新名称空间时,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 

并重新启动服务器(也许)。 这应该解决束类找不到问题。

我没有使用generate:bundle命令,因为标准是把所有东西都放在AppBundle下面,所以我不知道这个“破”了多久。 但是上周至less有三个问题表明这是近期的事情。

顺便说一下,当我刷新浏览器时,我得到了“Hello World”,这让我有点不解。 原来新的bundle会覆盖/ route,这也是特别的。

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

 #composer.json "psr-4": { "": "src/" }, To "psr-4": { "AppBundle\\": "src/AppBundle" }, 

尽pipe我认为拼出单个命名空间可能是“更好的”,但总是可以将其改回。 不确定。

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

看起来维护人员比打破现有的命令更喜欢微小的速度提升。 好吧。 Symfony Flex应该让所有的东西都变得更好。

如果为多个项目 (使用自己的名称空间)生成一个捆绑包,则需要将其添加到composer.json如下所示:

让我们假设你的包名是CompanyFooBundle ,命名空间为Company\Bundle\FooBundle那么这个作曲者自动加载部分应该是这样的:

 ... "autoload": { "psr-4": { "Company\\Bundle\\FooBundle\\": "src/Company/Bundle/FooBundle" }, "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] }, ...