2017-07-06 67 views
22

我想开始在Symfony的一个新项目3.3,并开始像往常一样:Symfony3 ClassNotFoundException的包创建后

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

2)创建一个新的软件包:php app/console generate:bundle(保罗/ ArtBundle,阳明海运,SRC /)

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

(1/1)ClassNotFoundException

试图从命名空间 “Paul \ ArtBundle”加载类“PaulArtBundle”。你忘记了另一个 命名空间的“使用”声明吗?在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(), 
    ]; 
} 

<?php 

namespace Paul\ArtBundle; 

use Symfony\Component\HttpKernel\Bundle\Bundle; 

class PaulArtBundle extends Bundle 
{ 
} 

任何想法怎么回事呢?我没有改变一件事,我只运行这些命令。

+0

检查AppKernel.php,它是正确的吗? –

+0

@SamJanssens是的,我也可以从我的内核 – TechTreeDev

+0

跳到我的IDE中的php文件你注册了新的Bundle @ Appkernel.php文件吗? –

回答

49

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

刷新浏览器,果然我没有找到消息类。

当引入新的名称空间时,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下,所以我不知道这个“破”了多久。但上周左右至少有三个问题表明这是近期的事情。

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

而如果有任何人想知道为什么这个开始发生,Symfony的3.2从

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

改变你总是可以只改回来,虽然我想拼出个人命名空间可能是“更好”。不确定。

这里是更多的细节问题:https://github.com/symfony/symfony-standard/issues/1098

貌似维护优于打破现有的命令一个微小的速度提升。好吧。 Symfony Flex应该让所有事情都变得更好。

+0

烨,工作后,重新启动服务器。 Tahnks :) – TechTreeDev

+0

那里真棒。感谢你的回答。花了几天时间和这个打交道。 – karbonphyber

+0

我刚刚发布了这个问题https://stackoverflow.com/questions/45151067/class-not-found-exception-in-appkernel-after-moving-to-symfony2-8-24你标记为重复和是的,这是一个是非常相似,只有我从2.8.9到2.8.24(其中** psr-4 **条目已经不同),并且除了在表格外的'composer dumpautoload'线之外,对我来说,正如我在我的问题中提到的,你能指出一个解决方法,thanx –

1

如果您生成在多个项目使用一束(有自己的命名空间),你需要将其添加在composer.json为follwed:

让我们假设你的软件包名称为CompanyFooBundle命名空间Company\Bundle\FooBundle然后作曲家自动加载部分应该看起来像:

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