2017-07-06 57 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" 
    ] 
}, 
...