Joomla 4.3.2 - Eigenes Plugin - provider.php Fehler Class xxx not found

  • Version: Joomla 4.3.2

    PHP: 8.0

    localhost (XAMPP)

    Hallo zusammen,

    auf Basis des Joomla Authentication Plugin, wollte ich ein eigenes Authentication Plugin erstellen. Ich hatte mir dazu das in J 4.3 bestehende kopiert und erst einmal mit meinen Namen/Bezeichnungen angepasst. Allerdings scheitere ich noch an der provider.php

    Folgende Meldung wird ausgegeben:

    0 Class "Itcs_email_login" not found

    Inhalt der "services\provider.php" (Kopie vom Original)

    Inhalt der "src\Extension\Itcs_email_login.php"

    Der Namespace wird korrekt in die autoload_psr4.php geschrieben.

    In der XML habe ich bei Namespace auch den Pfad "src" eingetragen.

    Ich kann irgendwie keinen Fehler finden - komme aber nicht darauf, warum das nicht funktioniert.

    Hat von Euch jemand einen Tipp?

    Wollte demnächste noch weitere Plugins von J3 auf J4 umstellen und dann auch gleich auf den neusten Stand bringen. Das hier wäre mein erster Test.

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.

  • Ich würde mal sagen, da stimmt was mit dem namespacing nicht. Hast du das namespacing denn gemäss PSR-4 standard gemacht?

    Hier wird das namespacing in Joomla 4 gut und verständlich erklärt:

    Externer Inhalt youtu.be
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    JoomGallery::friends ist aktuell noch auf der Suche nach Helfern für die JoomGallery 4 Entwicklung!

    Gesucht sind Leute für die PHP-Entwicklung, zum Testen, Übersetzen und Dokumentieren.

    Bei Interesse melde dich per PM oder Mail bei mir (Elfangor93).

  • Ich würde mal sagen, da stimmt was mit dem namespacing nicht.

    Nach meinem Verständnis müsste das richtig sein. Bei den Modulen funktioniert es auf jeden Fall. Bei Plugins hatte ich es bisher noch nie eingesetzt. Bei Plugins kommt ja die Gruppe noch mit dazu.

    In der XML steht

    XML
    <namespace path="src">ITCS\Plugin\Authentication\ItcsEmailLogin</namespace>

    in der "..\plugins\authentication\itcs_email_login\src\Extension\itcs_email_login.php" ist der Eintrag

    PHP
    namespace ITCS\Plugin\Authentication\ItcsEmailLogin;

    und in der "...\plugins\authentication\itcs_email_login\services\provider.php" wir der aufgerufen mit

    PHP
    use ITCS\Plugin\Authentication\ItcsEmailLogin;

    Wenn ich mir die Einträge in der autoload_psr4.php anschaue und vergleiche:

    PHP
    'ITCS\\Plugin\\Authentication\\ItcsEmailLogin\\' => [JPATH_PLUGINS . '\authentication/itcs_email_login/src'],
    'Joomla\\Plugin\\Authentication\\Joomla\\' => [JPATH_PLUGINS . '\authentication/joomla/src'],

    Ich hatte die itcs_email_login.php auch schon mal umbenannt nach Itcs_email_login.php, dass die mit einem großen i beginnt. Aber beim Windows-System spielt das eigentlich keine große Rolle.

    Bei den Modulen habe ich den Namespace genauso, nur da gibt man keinen Pfad an, weil es direkt in die Helper geschrieben wird.

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.

  • Ah - ich glaube ich habe den Fehler gefunden. pardon

    in der "..\plugins\authentication\itcs_email_login\src\Extension\itcs_email_login.php" fehlt scheinbar am Ende des Eintrag noch die Angabe des Verzeichnis "\Extension"

    PHP
    namespace ITCS\Plugin\Authentication\ItcsEmailLogin\Extension;

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.

  • Einfacher ist es auch, wenn du dich an die Datei-/Klassenstruktur von Joomla hälst (was jetzt nicht unbedingt dein Problem löst):

    - CamelCase statt Snake_Case

    - Subscriber-Interface für das Plugin

    Siehe auch: Code Standard

    und persönliche Meinung: ich bin ja ein Fan davon, dass der Code auch bisschen atmen darf, sprich vor/nach if-statements eine Leerzeile, vor return statements eine Leerzeile und auch wenn es verschiedene Blöcke gibt, die unterschiedliche Aufgaben haben diese mit Leerzeilen trennen (nach der Namespace-Definition, vor dem ersten "use" und vor dem defined etc.).

  • Einfacher ist es auch, wenn du dich an die Datei-/Klassenstruktur von Joomla hälst (was jetzt nicht unbedingt dein Problem löst):

    - CamelCase statt Snake_Case

    - Subscriber-Interface für das Plugin

    Ja - ich habe es jetzt dahingehend geändert und die fehlende Ergänzung vorgenommen.

    Hauptproblem war, dass ich den Zusatz am Ende des Namespace vergessen hatte.

    Jetzt funktioniert es auch. Damit kann ich jetzt weiter machen.

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.

  • Hallo Lukas,

    Kannst du mir bitte dein Plugin als Vorlage senden? Ich bin gerade selber an einem Custom Auth Plugin und habe dafür einfach das LDAP Plugin missbraucht, was nicht so sexy ist. Funktioniert und wird eh nie mehr seitens Joomla aktualisiert :D Trotzdem wäre es sauberer ein separates Plugin dafür zu haben.

    Vielen Dank im Voraus!