Wie führt man benutzerdefinierten Code in Shopware 6 in einem externen Skript / Datei aus?
Manchmal ist es notwendig Shopware 6-Code extern ausführen. Während der Entwicklung oder der Fehlersuche in einem System kommt dies recht häufig vor. Es gibt mehrere Fälle, in denen dies notwendig sein könnte:
- Ihr Kunde schickt Ihnen einen Stacktrace und Sie müssen den Fehler schnell reproduzieren
- Sie wollen das Verhalten eines Plugins eines Drittanbieters in einem ganz speziellen Fall testen
- Sie wollen Daten aus dem System abrufen, ohne direkt auf die Datenbank zuzugreifen
- Sie benötigen eine schnelle Integration mit anderen Frameworks oder Plattformen, die auf demselben Webserver installiert sind
- Sie wollen eine schnelle Testausführung einer Methode, einer Klasseninstanzierung, eines Cron-Jobs oder einer geplanten Aufgabe durchführen
Die Lösung mit der PHP-Datei
In älteren PHP-Systemen wie Magento 1 oder sogar Magento 2 war es möglich, einfach eine test.php-Datei zu erstellen, das System hochzufahren, die benötigte Klasse abzurufen und sie auszuführen. Das Ergebnis kann entweder ein Fehler oder nur die Gesamtsumme einer bestimmten Bestellung sein.
Bei Shopware 6 oder Symonfy im Allgemeinen funktioniert dies nicht, da der Container die Klassen nicht öffentlich zugänglich macht. Die Klassen müssen in eine andere Klasse injiziert werden, um sie nutzen zu können. Was im Allgemeinen in Bezug auf moderne Programmierung Sinn macht, macht die Dinge in diesem Fall nur kompliziert und mühsam.
Die public = true Lösung
Eine Lösung des Problems wäre, den Dienst öffentlich zugänglich zu machen und ihn dann wie im PHP-Beispiel aufzurufen. Das mag in einem System, das Sie kontrollieren, perfekt funktionieren, aber nicht in einem, in dem Sie einfach nur etwas debuggen wollen und dem System keinen Schaden zufügen wollen.
Aufruf von benutzerdefiniertem Code mit einem Symfony-Befehl
Die einfache Lösung des Problems, die jedoch etwas mehr Arbeit als früher macht, besteht darin, einen Symfony-Befehl zu erstellen, die benötigten Services zu injecten und ihn über die Konsole auszuführen.
Um es einfach zu machen, haben wir dies bereits für Sie getan – holen Sie sich einfach unsere Debug-Befehlserweiterung von Github, passen Sie sie an Ihre Bedürfnisse an und führen Sie sie aus:
./bin/console debug:test-command
Das war’s, jetzt kannst du testen, was du willst! 🙂
Shopware 6 Agentur gesucht?
Sie sind auf der Suche nach einer zuverlässigen Agentur, die sich mit Shopware 6 auskennt und Ihnen unkompliziert durch den Online-Shop Alltag hilft? NETZKOLLEKTIV betreut Händler seit über 10 Jahren. Rufen Sie uns an!
Jetzt unverbindlich über mein Projekt sprechen