创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" ] }, ...