2017-12-29 38 views
0

laden In meinem symfony-Projekt habe ich zwei Pakete. Mein erstes Bundle (Bundle1) ist das Hauptbündel und das zweite Bundle (Bundle2) wird zum Speichern einiger Dienste verwendet.Bundle-Dienst - versucht, die Klasse aus dem Namespace

Hier ist meine service.yml (Bundle2):

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

Und in Bundle1 verwende ich meinen Dienst wie folgt aufrufen:

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

Nach dem Löschen des Cache Ich habe diesen Fehler:

Es wurde versucht, die Klasse "GenericFindHelper" aus dem Namespace "SC \ EzPublishHelpersBundle \ Helper" zu laden. Haben Sie eine Anweisung "use" für einen anderen Namespace vergessen?

Stack Trace

in app/cache/dev/appDevDebugProjectContainer.php in Zeile 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')); 
} 
/** 

Hier ist mein automatisches Laden in composer.json

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

Und hier ist meine Bundle2 Struktur

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

Haben Sie eine Idee? Habe ich etwas vergessen?

Dank

+0

Sieht aus wie ein Autoloading-Problem. Kannst du überprüfen, ob die Ordnerstruktur mit dem Namespace übereinstimmt und vielleicht den Autoload-Bereich von deiner composer.json hier hinzufügen? – dbrumann

+0

Ich habe mein Bündel umbenannt, vielleicht deswegen? Aber ich habe überall gesucht und ich kann nicht finden, wenn ich etwas vergessen habe ... Und ich aktualisierte meine Nachricht mit meinem Autoload – ReaperSoon

+0

In diesem Fall bitte zeigen Sie Ihre Ordnerstruktur. Die Datei sollte sich unter 'src/SC/EzPublishHelpersBundle/Helper/GenericHelper.php' befinden. – dbrumann

Antwort

1

Sie haben eine Diskrepanz zwischen Verzeichnisnamen und Namespace. In Ihrer Ordnerstruktur heißt es Helpers (mit einem Plural s) und in Ihrem Namespace verwenden Sie Helper. Der Autoloader verwendet die Ordnernamen auf die Klassennamen übereinstimmen, also entweder Sie diese Diskrepanz in Ihrem Autoload angeben:

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

oder (wahrscheinlich den einfachen und gemeinsamen Weg) Benennen Sie den Ordner zu Helper.

Das gleiche gilt übrigens für den Klassennamen. Wenn sich Ihre Klasse GenericHelper in der Datei GenericFindHelper.php befindet, kann der Autoloader den Dateinamen nicht dem Klassennamen zuordnen. Benennen Sie also die Datei um oder verwenden Sie den classmap-Autoloader für diese spezielle Datei, wenn es für Sie absolut wichtig ist, den Namen und den Namespace beizubehalten.

edit: Ich bemerkte gerade den falschen Klassennamen war nur ein Tippfehler in meiner Antwort. In Ihrem Beispiel stimmt es überein.

+0

Danke für die Antwort, die ich nicht gesehen habe. Ich werde heute Abend versuchen und dir sagen, ob alles in Ordnung ist – ReaperSoon

+0

Es funktioniert gut, vielen Dank. Ich habe es immer wieder überprüft und habe das Missverhältnis nicht gesehen ... Danke :) – ReaperSoon

Verwandte Themen