Einstieg in Pluginprogrammierung

Hallo, 

im Zuge meiner Ausbildung als Anwendungsentwickler versuche ich mich aktuell an der Programmierung von Shopware 5 Plugins. Leider komme ich damit aktuell keinen Schritt weiter, da selbst die Example Plugins (z.B. https://developers.shopware.com/developers-guide/controller/ ) auf einem bei Mittwald gehostetem Testserver (5.5.10) nach der Aktivierung einen Error 500 werfen. 

Hat da jemand einen Tipp ob es irgendwo noch andere Dokumentationen gibt mit funktionierenden Beispielen?

Vielen Dank

Michael 

Als erstes solltest du dir mal eine lokale Entwicklungsumgebung installieren. Siehe hier: https://developers.shopware.com/sysadmins-guide/installation-guide/ und hier: https://github.com/shopware/shopware/blob/5.5/README.md#installation-via-git

Entwicklung direkt auf einem Server wo man am Ende nur FTP hat, kann ich nicht empfehlen.

 

Ich habs sowohl Lokal als auch auf dem Server getestet. Beidesmal die selbe Problematik. Mit dem gehosteten Server wollte ich nur Ausdrücken, dass ich irgend nen dummen Fehler bei der Installation lokal ausschließen kann. 

Hast du es mal mit anderen Plugins probiert? Bei einem 500er Fehler musst du im error-Log von Php oder deinem Webserver nachsehen. Da sollte eine ausführliche Fehlermeldung stehen. Wenn du die hier postest, kann man dir sicher weiterhelfen. Den Log findet man je nach Setup woanders. Hier einfach mal googeln, solltest du den Log nicht gleich finden.

1 „Gefällt mir“

Fatal error : Uncaught ReflectionException: Class SwagProductListing\Subscriber\TemplateRegistration does not exist in /html/shopware/engine/Shopware/Components/DependencyInjection/Compiler/EventSubscriberCompilerPass.php:64 Stack trace: #0 /html/shopware/engine/Shopware/Components/DependencyInjection/Compiler/EventSubscriberCompilerPass.php(64): ReflectionClass->__construct(‚SwagProductList…‘) #1 /html/shopware/vendor/symfony/dependency-injection/Compiler/Compiler.php(141): Shopware\Components\DependencyInjection\Compiler\EventSubscriberCompilerPass->process(Object(Symfony\Component\DependencyInjection\ContainerBuilder)) #2 /html/shopware/vendor/symfony/dependency-injection/ContainerBuilder.php(790): Symfony\Component\DependencyInjection\Compiler\Compiler->compile(Object(Symfony\Component\DependencyInjection\ContainerBuilder)) #3 /html/shopware/engine/Shopware/Kernel.php(555): Symfony\Component\DependencyInjection\ContainerBuilder->compile() #4 /html/shopware/engine/Shopware/Kernel.php(300): Shopware\Kernel->initializeC in  /html/shopware/engine/Shopware/Components/DependencyInjection/Compiler/EventSubscriberCompilerPass.php  on line  64

 

Das ist die Meldung die ausgegeben wird. 

Mein Vorgehen => Frische Installation, Plugin hochladen, installieren, aktivieren => Fehlermeldung.  Hab an dem ganzen Plugin keinen Handstreich gemacht bisher. 

 

Kannst du damit was anfangen?

Moin @MichaelMatz‍,

woher hast du denn das besagte Plugin, welches den genannten Fehler wirft?
Ich nehme an, dass es sich hierbei um dieses Plugin handelt, aber in welchem Beispiel-Artikel o.Ä. hast du es gefunden?

Ich schaue mir gleich mal an, ob das Plugin überhaupt noch mit der aktuellen Shopware Version kompatibel ist. Dies könnte ggf. bereits eine Ursache für den Fehler sein.

Liebe Grüße
Shopware Patrick Stahl

Hallo, 

 

das Plugin habe ich unter https://developers.shopware.com/developers-guide/controller/ ganz unten gefunden.  ==> https://developers.shopware.com/exampleplugins/SwagController.zip

Hey @MichaelMatz‍,

oh, da hat sich tatsächlich ein Fehler eingeschlichen.

Kurz zur Erklärung:
Das Plugin, das du installiert hast, heißt  SwagController  und läuft entsprechend auch unter dem Namespace  SwagController.
In Shopware laden wir Klassen per PSR-4 Autoloading, was eigentlich für dich erstmal nur heißt: Der Namespace jeder Klasse muss in Etwa dem Pfad zu der PHP Datei entsprechen, so wie die Klasse dem Dateinamen entsprechen muss.
Als Beispiel:
Die Datei im Pfad _meinPlugin/Controllers/Frontend/ExampleControllers/ Foo.php _hat den Klassennamen  Foo  und den Namespace MeinPlugin\Controllers\Frontend\ExampleControllers.

Warum ich dir das erkläre?
Wenn du nun einmal in das tatsächliche Plugin schaust, findest du eine Datei in folgendem Pfad: SwagController/Subscriber/ TemplateRegistration.php
Der Namespace müsste also SwagController\Subscriber lauten, gemäß dem Pfad. Und die Klasse eben  TemplateRegistration.
Wenn du die Datei nun aber öffnest, wirst du feststellen: Der Namespace oben passt nicht! Dieser lautet SwagProductListing, obwohl dort  SwagController  stehen müsste.

Das müsstest du also mal eben korrigieren. Wichtig ist, dass du das auch in der Datei SwagController/Resources/services.xml korrigierst, hier wird die selbe Klasse mitsamt falschem Namespace auch nochmal referenziert.

Danach läuft das Plugin.

Hilft dir das weiter?

Liebe Grüße,
Shopware Patrick Stahl

P.S.: Das Plugin in der Doku korrigiere ich natürlich eben. :slight_smile:
P.P.S: Hier kannst du meine Änderungen dazu sehen. Sind genau die, die du auch machen müsstest.
P.P.P.S: Änderung ist auch schon gemerged! :stuck_out_tongue:

1 „Gefällt mir“

Vielen Dank für die Hilfe!

Jetzt funktioniert es. :slight_smile: