Artikel
von Patrick Froch

Contao 4: Konsolenbefehl erstellen

Jeder kennt vermutlich den einen oder anderen Befehl für die Symfony-Konsole, wie z.B. cache:clear, contao:symlinks, oder debug:container. Diese Kommandozeilenbefehle sind sehr nützlich und man kann mit ihnen einiges automatisieren. In diesem Artikel zeige ich, wie man einen eigenen Befehl erstellt.

Vorbemerkung

Ich gehe hier nicht mehr auf die Grundlagen ein, da diese schon zur Genüge in diesem Blog behandelt wurden, z.B. in CK2018: Event-Driven-Development, oder in Contao 4: Dependency Injection.

Dependency Injection

Auch für einen Konsolenbefehl benötigen wir eine Extension-Datei. Diese leigt unter
src/Esit/Demo/DependencyInjection/EsitDemoExtension.php.

In Zeile 18 wird die Yaml-Datei mit der Konfiguration der Kommandos geladen.

commands.yml

Die Konfiguration unseres Kommandos speichern wir unter src/Esit/Demo/Resources/config/commands.yml.

Klasse Command

Nun benötigen wir noch eine Klasse, die die Verarbeitung unseres Komandos übernimmt. Bei mir leigt sie unter
src/Esit/Demo/Classes/Command/DemoOutputCommand.php.

In Zeile 23 beginnt die Konfiguation unseres Kommandos. Der Name des Kommandos steht in Zeile 30. Das in Zeile 27 erzeugte Argument wird in Zeile 31 eingefügt und in Zeile 32 wird der Hilfetext gesetzt.

Wird unser Kommando aufgerufen, wird die Methode executeLocked in Zeile 36 gestartet. Die Zeilen 40 bis 49 stehen nur als Hinweis dort, da mich dies einige Tüftelei gekostet hat. In Zeile 52 wird der Kommandozeilenparameter ausgelesen und in Zeile 55 die eigentliche Verarbeitung aufgerufen.

Diese findet ab Zeile 66 in der Methode demoOutput statt, welche hier sehr rudimentär ist. In der Regel würde hier z.B. ein Event aufgerufen.

Aufruf

Nun kann unser Kommando auf der Kommandozeile aufgerufen werden:

($> symbolisiert den Promt und darf nicht mit eingegeben werden!)

Zurück

Kommentare

Aufgrund der unklaren Rechtslage durch die DSGV habe ich mich entschlossen, die Kommentare bis auf Weiteres zu deaktivieren.