"Es wurden ungültige Module erkannt." - Modul nicht aktivierbar

Hallo zusammen,

ich habe mir folgendes Modul erstellt, um auch die Varianten durchsuchbar zu machen: https://github.com/pflaesterer/searchoxid

Das funktioniert bis CE 6.1.5 soweit auch. In CE 6.1.6 kann ich das Modul aber nicht aktivieren, es erscheint obige Fehlermeldung. Komplett:

Das Logfile schweigt sich leider aus. Ich habe nicht den leisesten Schimmer, was da los ist. Kann mir bitte jemand einen Tipp geben?

Moin…

Bist Du sicher, dass der Pfad in der composer.json stimmt?

"Pflaesterer\\SearchOxid\\": "./source/modules/pflaesterer/searchoxid"

Wir legen die Module immer in ein lokales Repo ab und installieren in ein Vendor-Verzeichnis. Da haben wir immer “…/…/…/source/modules/…”.

Grüße,
Thorsten

Da holt mich einfach mein lückenhaftes Verständnis von composer und autoloader ein. :frowning:

Damit ich das mal richtig verstehe: In der composer.json mache ich unter autoload die Namensräume bekannt, damit PHP weiß, wovon ich spreche, wenn ich bestimmte Klassen lade, richtig?

In einem anderen Modul (https://github.com/pflaesterer/stornoxid) gebe ich da einfach das Wurzelverzeichnis des Moduls an:

"Pflaesterer\\StornOxid\\": "./"

Das sagt dem autoloader, dass der Namensraum hier beginnt und mit z.B. “Application/Model/…” fortgesetzt werden kann.

In dem o.g. Modul funktioniert das so auch. Nun habe ich das auch für das fehlerhafte searchoxid so angepasst - weiterhin gleicher Fehler (…“ungültige Module erkannt.”).

Dann habe ich den Pfad vom vendor-Verzeichnis aus eingetragen, also mit ../../../source/modules/pflaesterer/searchoxid - auch hier wieder der Fehler.

Was verstehe ich denn da falsch? Und wird denn nirgendwo geloggt, warum er beim Aktivieren auf die Nase fällt?

Vielleicht fehlt composer dumpautoload oder composer install?

Habe ich gemacht, keine Änderung. Zum Verrücktwerden.

Okay, also irgendein namespace-fuckup muss es gewesen sein: In der composer.lock im Stammverzeichnis war - egal, was ich anstellte - immer der falsche Pfad im Autoload "./source/modules/pflaesterer/searchoxid".

Da habe ich im Repo die composer.json angepasst und einen neuen Release erstellt:

Modul mit composer remove entfernt und mit composer require frisch gezogen - Bumm, es geht.

Irgendwo habe ich mich wohl verzettelt. Danke für die Hilfe und die Tipps, das hat mir sehr geholfen! :slight_smile:

Ja composer läuft da oft noch nicht so recht rund.

Übrigens, bei dem Pfad “.” oder “./” werden deine PHP Klassen nicht aus dem Modul-Verzeichnis geladen sondern von dem Ort, wo die Quelle liegt (also bei einem lokalen Repo dort, sonst im Vendor). Die ganzen OXID-Spezifischen weiteren Dateien aber aus dem modul-Verzeichnis source/modules/…

Das ist nicht wirklich schlimm. Sollte man aber im Hinterkopf haben, wenn man auf einem Testsystem entwickelt. Dann muss man die angepassten Dateien an der richtigen Stelle ablegen. Damit spart man sich dann häufiges und zeitraubendes composer update und Dateien im modules Verzeichnis überschreiben…

Grüße,
Thorsten

Danke für den Hinweis. Ist eigentlich alles recht logisch, wenn ich so darüber nachdenke. Aber dadurch, dass ich mich eigentlich immer nur alle paar Wochen mit dem Code in OXID befassen muss, bin ich da hin und wieder nicht so trittsicher, wie ich es gerne wäre. :slight_smile: