2017-07-16 14 views
0

私はsymfonyを学ぶために始めていると私は、このことについては何もありませんいくつかのチュートリアル次のです:生成されたすべてのバンドルを手動でcomposer.jsonに追加する必要はありますか?

私はsymfonyのインストーラを使用して新しいプロジェクトを作成し、composer installを実行し、その後php app/console server:start私は私のブラウザでそのプロジェクトを開くことができます。

BUT!

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 

をそして私は、この

{ 
    "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" 
     ] 
    }, 
    .......... 
ようAppBundle後に私composer.jsonファイルに移動し、私の新しい生成されたバンドルを追加する必要があります:私はコマンド php app/console generate:bundleで新しいバンドルを作成するとき、私は、このエラーメッセージが表示されます

そして、サーバーを再起動しようとすると、ブラウザにHello worldが表示されます。

私はこれを毎回行う必要があります(作成された新しいバンドルをcomposer.jsonファイルに追加する必要がありますか)。

答えて

1

はい。これがその理由です。なぜなら、通常はその上に名前空間があります。あなたの名前や会社の略語など。この方法では、srcフォルダの名前空間だけを追加するだけで、すべてのバンドルが自動的に「見つかった」ようになります。

例:

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

今すぐもちろん、あなたのバンドルは、その名前空間を使用する必要があり、例えば:

namespace Acme\BlogBundle; 

class BlogBundle { 
} 
+0

これはかなり正確ではありません。 1つの "psr-4":{"": "src /"}はすべてのケースを処理します。実際、S3.2以前では、これはまさにcomposer.jsonにあったものです。おそらく、私は少し懐疑的ですが、マッピングの指定は少し高速です。詳細:https://github.com/symfony/symfony-standard/issues/1098 – Cerad

関連する問題