Heim > Backend-Entwicklung > PHP-Tutorial > Warum löst Symfony3 nach dem Generieren eines Bundles eine ClassNotFoundException aus?

Warum löst Symfony3 nach dem Generieren eines Bundles eine ClassNotFoundException aus?

Mary-Kate Olsen
Freigeben: 2024-11-22 09:31:11
Original
1018 Leute haben es durchsucht

Why Does Symfony3 Throw a ClassNotFoundException After Generating a Bundle?

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:

  1. Ein neues Symfony-Projekt wurde mit symfony new ArtProject initiiert.
  2. Ein neues Bundle wurde mit PHP app/console generiert:bundle Paul/ArtBundle, yml , src/.

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(),
    ];
}
Nach dem Login kopieren

und das PaulArtBundle wurde definiert als:

<?php

namespace Paul\ArtBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class PaulArtBundle extends Bundle
{
}
Nach dem Login kopieren

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" ]
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage