Symfony3 ClassNotFoundException Unraveled
Ein Benutzer stieß auf die gefürchtete ClassNotFoundException, als er nach der Erstellung eines Bundles mit einem neuen Symfony3-Projekt begann. Tief in die Details eintauchen:
Zu ihrer Bestürzung versuchten sie, darauf zuzugreifen 127.0.0.1:8000 führte zu der berüchtigten Fehlermeldung: „ClassNotFoundException: Es wurde versucht, die Klasse „PaulArtBundle“ aus dem Namespace „PaulArtBundle“ zu laden.
Enthüllung der Ursache
Die Der Benutzer hat den Code sorgfältig überprüft und festgestellt, dass AppKernel.php Folgendes enthielt Aussage:
public function registerBundles() { $bundles = [ new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), ...... new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), new AppBundle\AppBundle(), new Paul\ArtBundle\PaulArtBundle(), ]; }
und das PaulArtBundle wurde definiert als:
<?php namespace Paul\ArtBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class PaulArtBundle extends Bundle { }
Das fehlende Glied entdeckt
Nach langem Nachdenken wurde es entdeckt dass der Befehl „generate:bundle“ den Autload-Abschnitt von „composer.json“ nicht aktualisieren konnte und das Hinzufügen des neuen Abschnitts versäumt hat Namespace.
Die Lösung
Um das Problem zu beheben, hat der Benutzer „composer.json“ manuell bearbeitet und den Abschnitt „Autoload“ aktualisiert:
# composer.json "autoload": { "psr-4": { "AppBundle\": "src/AppBundle", "Paul\": "src/Paul" }, "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] }
Wird ausgeführt Composer DumpAutoload und Neustart des Servers lösten die ClassNotFoundException.
Zusätzlich Hinweis
Der Benutzer hat festgestellt, dass das neue Bundle die Standardroute (/) überschrieben hat, daher die unerwartete „Hallo Welt“-Begrüßung.
Ein interessanter Einblick
Vor Symfony 3.2 ging die Composer.json-Konfiguration von einer namespacefreien PSR-4-Zuordnung aus. Mit Symfony 3.2 wurde jedoch ein expliziterer Ansatz eingeführt, bei dem Namespaces explizit angegeben wurden. Diese Verschiebung könnte zu diesem Problem beigetragen haben.
Fazit
Während der Befehl „generate:bundle“ in der Vergangenheit eine einfache Möglichkeit zum Erstellen von Bundles war, gab es kürzlich Änderungen in der Autoloading-Konfiguration von Symfony erfordern manuelle Eingriffe, um eine nahtlose Bundle-Integration sicherzustellen.
Das obige ist der detaillierte Inhalt vonWarum löst Symfony3 nach dem Generieren eines Bundles eine ClassNotFoundException aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!