2017-07-16 38 views
0

我已經開始學習Symfony和我下面一些教程那裏是一無所知:我是否需要手動將每個生成的包附加到composer.json?

當我創建的symfony安裝一個新的項目並運行composer install然後php app/console server:start我可以在瀏覽器中打開該項目。

但是!當我創建命令php app/console generate:bundle新的組合我收到此錯誤信息:

PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\ClassNotFoundException: Attempted to load class "BlogBundle" from namespace "BlogBundle". 
Did you forget a "use" statement for another namespace? in /home/user/Symfony/myapp/app/AppKernel.php:19 

然後我需要去我composer.json文件並追加我的新生成的束的appbundle後這樣

{ 
    "name": "user/myapp", 
    "license": "proprietary", 
    "type": "project", 
    "autoload": { 
     "psr-4": { 
      "AppBundle\\": "src/AppBundle", 
      "BlogBundle\\": "src/BlogBundle" // <-- this is the new appended one 
     }, 
     "classmap": [ 
      "app/AppKernel.php", 
      "app/AppCache.php" 
     ] 
    }, 
    .......... 

然後,當我嘗試再次啓動服務器時,它可以正常工作,並在瀏覽器中顯示Hello world。

所以問題是我必須每次都這樣做(在composer.json文件中追加新生成的包)?

回答

1

是的。這就是爲什麼你通常有一個名字空間的原因。例如,您的名字或公司的一些縮寫。通過這種方式,您只能爲src文件夾添加該名稱空間,並且所有捆綁包都會自動「找到」。

例子:

{ 
    ... 
    "autoload": { 
     "psr-4": { 
      "Acme\\": "src" 
     }, 
    } 
    ... 
} 

當然現在你捆需要使用該命名空間,如:

namespace Acme\BlogBundle; 

class BlogBundle { 
} 
+0

這是不太正確的。一個「psr-4」:{「」:「src /」}將處理所有情況。事實上,在S3.2之前,這正是composer.json中的內容。據說,雖然我有點懷疑,但指定映射比較快。更多信息:https://github.com/symfony/symfony-standard/issues/1098 – Cerad

相關問題