Schönere Kommandos mit SymfonyStyle
Nach dem ich im Artikel "Contao 4: Konsolenbefehl erstellen (Update 05.2020)" darauf eingegangen bin, wie man eigene Kommandos erstellt, beschäftigen wir uns heute damit, wie wir diese etwas übersichtlicher gestalten können.
Normale Ausgabe
Normalerweise wird die Ausgabe über $output
realisiert, wie z.B. in dieser Snippet aus dem
Symfony-Handbuch zu sehen:
SymfonyStyle
Da diese Art der Ausgabe schnell unübersichtlich werden kann, schauen wir uns nun SymfonyStyle
an. Ich orientiere mich
am Symfony-Handbuch und fasse es hier kurze auf deutsch zusammen. Weitere Details sind
hier zu finden.
Für dieses Artikel habe ich ein Konsolenkommando erstellt, in welchem ich die Ausgabe aufrufe. Es orientiert sich stark an dem Kommando aus dem oben genannten Artikel und sieht folgendermaßen aus:
In den einzelnen Beispielen, werde ich nur die Aufrufe für die Ausgabe zeigen, diese müssen dann im Beispielkommando in Zeile in Zeile 33 eingefügt werden.
(In den Beispielen muss ein <?php
stehen, damit das Syntax Highlighting von GitHub funktioniert. Beim Einfügen in das
Kommando, muss dies natürlich weggelassen werden.)
Basisausgaben
Titel:
Mit title()
kann ein Titel ausgegeben werden.
Abschnitt:
Mit section()
werden Überschriften für Abschnitte erzeugt.
Text:
text()
kann entweder einen String oder ein Array von Strings übergeben werden.
Auflistung:
Mit listing()
kann eine Liste erstellt werden.
Tabelle:
Wie der Name schon vermuten lässt, gibt table()
eine Tabelle aus. Die Methode nimmt als ersten Parameter ein Array mit den Spaltenüberschriften und als zweiten ein zweidimensionales Array entgegen, dass die Spalten und Zeilen enthält.
Horizontale Tabelle:
Auch horizontal ausgerichtete Tabellen sind möglich. Das Eingabeschema ist genau so wie bei der normalen Tabelle, nur dass Reihen und Spalten bei der Ausgabe vertauscht werden, da die Tabelle ja horizontal ausgegeben wird.
Definitionsliste:
Für die übersichtliche Ausgabe von Key-Value-Beziehungen gibt es die Definitionsliste.
Zeilenumbruch:
Neben der Möglichkeit einen Zeilenumbruch einzufügen (erste Listing), gibt es auch die Möglichkeit mehrere auf ein Mal einzufügen (zweite Listing).
Bemerkung:
Auch Bemerkungen dürfen nicht fehlen. Hier gibt es die Möglichkeit Strings oder Arrays von Strings zu übergeben.
Warnung:
Warnungen sind sehr ähnlich den Bemerkungen, nur auffälliger.
Benutzerinteraktion
Frage:
Nun kommen wir zur Interaktion mit dem Benutzer. Die erste Art der Interaktion, ist die Frage. Neben der offenen Frage, bei der eine beliebige Antwort eingegeben werden kann, kann auch ein Vorgabewert festgelegt werden. Eine Validierung ist ebenfalls möglich.
Passwortabfrage:
Die Passwortabfrage ist sehr ähnlich der Fragen, nur dass hier die Eingabe des Benutzers nicht angezeigt wird.
Bestätigung:
Die Bestätigung ist eine Frage, auf die nur mit ja oder nein geantwortet werden kann. Auch hier kann festgelegt werden, was der Vorgabewert sein soll.
Auswahl:
Bei der Auswahl kann man zwischen vorgegebenen Antworten wählen. Auch hier kann wieder ein Wert bestimmt werden, der ausgewählt wird, wenn einfach bestätigt wird (Vorgabewert).
Rückmeldung
Erfolg:
Bei den Rückmeldungen gibt es die Möglichkeit einen String oder ein Array von Strings zu übergeben. Im Screenshot wird nur Letzteres gezeigt. Die gilt auch für die Warnung und den Fehler (nächster und übernächster Abschnitt).
Warnung:
Fehler:
Fazit
Mit SymfonyStyle
gibt es sehr viele Gestaltungsmöglichkeiten. Damit die Übersichtlichkeit nicht verloren geht ist manchmal weniger mehr. Mitunter kann die schöne neu und bunte Konsolenwelt auch überladen wirken. Hier gilt es wie immer einen gesungen Mittelweg zu finden und sich im Vorfeld zu überlegen, wie man seine Ausgaben strukturieren will.
Kommentare
Kommentar von Marko Cupic |
Hallo Patrick
Danke vielmals für diese sehr schöne Anleitung. Fehlt nur noch das passende Projekt. :-)
Liebe Grüße
Marko
Kommentar von Lars Moelleken |
Danke, vermisse so Blog Posts, wo der Fokus auf ein Thema liegt + Code Beispiele = ?
Einen Kommentar schreiben