Ergebnis 1 bis 13 von 13

Thema: Contao 4 Extension "ClassNotFoundException in AppKernel"

  1. #1
    Contao-Fan Avatar von marcos
    Registriert seit
    09.02.2011.
    Ort
    Schweiz
    Beiträge
    575
    User beschenken
    Wunschliste

    Frage Contao 4 Extension "ClassNotFoundException in AppKernel"

    Hallo zusammen

    Ich habe soeben begonnen ein Bundle für Contao 4 zu erstellen. Ich erhalte jedoch immer eine ClassNotFoundException in AppKernel.php. Ich sehe den Fehler aber nicht. Folgendes ist eingerichtet:

    Ordnerstruktur
    Code:
    ├─ vendor/
    │   ├─ marco/
    │   	├─ test-bundle/
    │   		├─ src/
    │   		  ├─ MarcoTestBundle.php
    │   		  ├─ Resources/
    │   		├─ composer.json
    /vendor/marco/test-bundle/src/MarcoTestBundle.php
    PHP-Code:
    namespace Marco\TestBundle;

    use 
    Symfony\Component\HttpKernel\Bundle\Bundle;

    class 
    MarcoTestBundle extends Bundle
    {

    AppKernel.php
    PHP-Code:
    //...
    new Marco\TestBundle\MarcoTestBundle(), 
    Meiner Meinung nach ist das alles korrekt eingerichtet. PHPStorm meldet mir auch nicht, dass die Klasse MarcoTestBundle nicht gefunden werden kann.

    Ich habe dann auch entsprechend die composer.json mit den autoload-Informationen erstellt.
    Code:
    "autoload": {
    	"psr-4": {
    	  "Marco\\TestBundle\\": "src/"
    	},
    },

    Sieht jemand den Fehler bzw. muss ich noch etwas ausführen? Ich habe mich grundsätzlich am faq-bundle von Contao orientiert.

    Vielen Dank und Gruss
    Marco
    Geändert von marcos (06.07.2016 um 22:40 Uhr)

  2. #2
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    Hast du deine Erweiterung über composer installiert? Oder einfach dort einkopiert?
    Bei Installation über composer werden spezielle autoload Dateien generiert anhand von composer.json, die fehlt dir offensichtlich nun.
    (vendor/composer/...)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  3. #3
    Contao-Fan Avatar von marcos
    Registriert seit
    09.02.2011.
    Ort
    Schweiz
    Beiträge
    575
    User beschenken
    Wunschliste

    Standard

    Nein, mein Modul ist noch nicht als Composer-Paket vorhanden, da ich ja erst lokal am entwicklen bin. Muss ich die also manuell noch erstellen?

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Bei der Entwicklung solltest du das ganze im /src Ordner von Symfony machen, nicht im /vendor Ordner. Wobei ich nicht weiß, was man machen muss bzgl. Der öffentlichen Contao Assets.

  5. #5
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.468
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Wobei ich nicht weiß, was man machen muss bzgl. Der öffentlichen Contao Assets.
    Es ist einfach nur ein Symfony-Bundle. Es gibt tonnenweise Doku zu Ressourcen in Symfony Bundles

    @Marco: Hast du "composer dump-autoload" ausgeführt, nachdem du den Autoloading-Teil in die composer.json geschrieben hattest?
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Ressourcen in Symfony Bundles sind mir schon klar, aber Contao hat ja einen eigenen Installer für die Contao Resourcen. Vielleicht verstehe ich das aber auch falsch.

  7. #7
    Contao-Fan Avatar von marcos
    Registriert seit
    09.02.2011.
    Ort
    Schweiz
    Beiträge
    575
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Bei der Entwicklung solltest du das ganze im /src Ordner von Symfony machen, nicht im /vendor Ordner. Wobei ich nicht weiß, was man machen muss bzgl. Der öffentlichen Contao Assets.
    Der /src Ordner wird mit der Standard-Contao-Installation nicht mitgeliefert. Der müsste für die Entwicklung von Hand noch erstellt werden. Ist das so gedacht?

    Zitat Zitat von Toflar Beitrag anzeigen
    @Marco: Hast du "composer dump-autoload" ausgeführt, nachdem du den Autoloading-Teil in die composer.json geschrieben hattest?
    Nein, das habe ich nicht gemacht. Kommt mein Bundle aber trotzdem in den Ordner /src?

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Zitat Zitat von marcos Beitrag anzeigen
    Der /src Ordner wird mit der Standard-Contao-Installation nicht mitgeliefert. Der müsste für die Entwicklung von Hand noch erstellt werden. Ist das so gedacht?
    Ein neues Bundle kannst du dir mit
    Code:
    php app/console generate:bundle
    erzeugen lassen.

    http://symfony.com/doc/current/bundl...te_bundle.html

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.517
    Partner-ID
    10107

    Standard

    Wobei, eine Contao Extension als lokales Bundle zu entwickeln ist ja auch irgendwie blöd, da man bspw. dem Template Loader ja den kompletten Pfad zu den Templates geben muss... und als lokales Bundle ist das dann src/Bundle/… während es als Paket dann vendor/package/src/Bundle/… ist.

    Also ich habe noch keine Ahnung, was nun die Best Practice für die Bundle Entwicklung von Contao ist .

  10. #10
    Contao-Fan Avatar von marcos
    Registriert seit
    09.02.2011.
    Ort
    Schweiz
    Beiträge
    575
    User beschenken
    Wunschliste

    Beitrag

    Zitat Zitat von Spooky Beitrag anzeigen
    Ein neues Bundle kannst du dir mit
    Code:
    php app/console generate:bundle
    erzeugen lassen.
    Stimmt! Gar nicht dran gedacht!
    Damit der generate-Befehl aber verwendet werden kann, muss zuerst noch das "sensio/generator-bundle" via Composer installiert und dann in AppKernel.php registriert werden.
    PHP-Code:
    new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle() 
    Das generator-bundle wird in der contao standard-edition nämlich nicht mitgeliefert.


    Ich hab jetzt mal ein einfaches Testbundle generieren lassen:

    Ordnerstruktur:
    Code:
    ├─ src/
    │   ├─ TestBundle/
    │   	├─ Controller/
    │   	├─ Resources/
    │   	├─ TestBundle.php
    │   	├─ composer.json
    TestBundle.php
    PHP-Code:
    namespace TestBundle;

    use 
    Symfony\Component\HttpKernel\Bundle\Bundle;

    class 
    TestBundle extends Bundle
    {

    AppKernel.php
    Code:
    new TestBundle\TestBundle(),
    composer.json
    Code:
    "autoload": {
    	"psr-4": {
    	  "TestBundle\\": ""
    	}
    }
    Aber auch hier meldet mir Symfony:
    Code:
    ClassNotFoundException in AppKernel.php line 43: Attempted to load class "TestBundle" from namespace "TestBundle".
    Aber das müsste doch jetzt eigentlich einwandfrei funktionieren?!


    Zitat Zitat von Spooky Beitrag anzeigen
    Wobei, eine Contao Extension als lokales Bundle zu entwickeln ist ja auch irgendwie blöd, da man bspw. dem Template Loader ja den kompletten Pfad zu den Templates geben muss... und als lokales Bundle ist das dann src/Bundle/… während es als Paket dann vendor/package/src/Bundle/… ist.

    Also ich habe noch keine Ahnung, was nun die Best Practice für die Bundle Entwicklung von Contao ist .
    Das würde mich auch interessieren. Vielleicht können die geübten Contao4-Extension-Enwickler hier ein paar hilfreiche Inputs geben
    Geändert von marcos (07.07.2016 um 21:21 Uhr)

  11. #11
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    Hast du "composer dump-autoload" ausgeführt?
    Falls das generate:bundle das nicht mit macht.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  12. #12
    Contao-Fan Avatar von marcos
    Registriert seit
    09.02.2011.
    Ort
    Schweiz
    Beiträge
    575
    User beschenken
    Wunschliste

    Standard

    Also generate:bundle erstellt keine composer.json. Da aber der Fehler nach der Generierung auch kam, habe ich eine composer.json angelegt und "composer dump-autoload" ausgeführt. Trotzdem findet Symfony die Klasse nicht. Ich zweifle langsam an meiner Installation Ich teste sonst mal mit einer frischen Test-Installation.

  13. #13
    Contao-Nutzer
    Registriert seit
    20.07.2016.
    Beiträge
    1

    Standard

    Ich weis nicht ob das immer noch aktuell ist. Aber versucht mal folgendes:

    Füge folgendes in die composer.json im Root-Verzeichnis ein:
    Code:
        "autoload": {
            "psr-0": {
                "": "src/"
            },
            "classmap": [
                "app/AppCache.php",
                "app/AppKernel.php"
            ]
        },
    Dann führ noch in der CLI folgendes aus: composer update

    Ich hoffe ich konnte weiterhelfen.

    MFG

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •