2017-12-29 33 views
0

からクラスをロードしようとしましたが、私は2つのバンドルを持っています。 私の最初のバンドル(Bundle1)はメインバンドルであり、2番目のバンドル(Bundle2)はいくつかのサービスを格納するために使用されます。ここでバンドルサービス - 私のsymfonyのプロジェクトでは、名前空間

は私service.yml(Bundle2)です:

services: 
    sc_ezpublish_helpers.generic_find: 
     class: SC\EzPublishHelpersBundle\Helper\GenericFindHelper 

そしてBundle1に私はこのように私のサービスを呼び出して使用します。私はこのエラーを持っているキャッシュをクリアした後

$findHelper = $this->get('sc_ezpublish_helpers.generic_find'); 

は、名前空間 "SC \ EzPublishHelpersBundle \ヘルパー" からクラス "GenericFindHelper" をロードしようとしました。 別の名前空間に「使用」ステートメントを忘れましたか?

スタックトレース

アプリ/キャッシュに

は/ dev/appDevDebugProjectContainer.phpラインで20582 -

*/ 
protected function getScEzpublishHelpers_GenericFindService() 
{ 
    return $this->services['sc_ezpublish_helpers.generic_find'] = new \SC\EzPublishHelpersBundle\Helper\GenericFindHelper($this->get('ezpublish.signalslot.repository'), $this->get('ezpublish.config.resolver.core')); 
} 
/** 

ここcomposer.json

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

の私のautoloadですそしてここにBundle2の構造があります

src/ 
├── SC 
│   └── EzPublishHelpersBundle 
│    ├── DependencyInjection 
│    │   ├── Configuration.php 
│    │   └── SCEzPublishHelpersExtension.php 
│    ├── Helpers 
│    │   └── GenericFindHelper.php 
│    ├── Resources 
│    │   └── config 
│    │    └── services.yml 
│    └── SCEzPublishHelpersBundle.php 

あなたのアイデアを持っていますか?私は何かを忘れましたか?

ありがとうございます。

+0

オートロードに関する問題のようです。フォルダ構造が名前空間と一致するかどうかチェックして、composer.jsonのautoloadセクションをここに追加してください。 – dbrumann

+0

私はバンドルの名前を変更しました。しかし、私はどこでも検索して、何か忘れてしまったのを見つけられません...そして、自分のメッセージを私のオートロードで更新しました – ReaperSoon

+0

その場合は、フォルダ構造を表示してください。ファイルには、私は私のBundle2構造を追加したのsrc/SC/EzPublishHelpersBundle /ヘルパー/ GenericHelper.php' – dbrumann

答えて

1

ディレクトリ名と名前空間の間に不一致があります。あなたのフォルダ構造では、それはHelpers(複数のs)と呼ばれ、あなたの名前空間にはHelperを使用します。

"autoload": { 
    "psr-4": { 
     "SC\\EzPublishHelpersBundle\\Helper\\": "src/SC/EzPublishHelpersBundle/Helpers/", 
     "": "src/" 
    } 
} 

やヘルパーにフォルダの名前を変更(おそらく簡単に、より一般的な方法を):あなたの自動ロード中に、この不一致を指定する必要がいずれかのように、オートローダは、クラス名に一致するようにフォルダ名を使用しています。

同じことによって、クラス名のために行きます。 GenericHelperクラスがファイル GenericFindHelper.phpにある場合、オートローダーはファイル名をクラス名と一致させることができません。したがって、名前と名前空間を維持することが絶対に重要な場合は、ファイルの名前を変更するか、この特定のファイルに対してクラスマップオートローダーを使用してください。

編集:私は間違ったクラス名が私の返事でちょうどタイプミスに気づきました。あなたの例では、それは一致します。

+0

私はそれを見ていない答えをありがとう。私は今夜​​お試しし、すべてがOKなら教えてください。 – ReaperSoon

+0

それはうまくいきます、ありがとう。私は何度も何度もチェックして、不一致を見なかった... ありがとう:) – ReaperSoon

関連する問題