DE

Eine Kommandozeilen-App erstellen

Eine JumPHP-CLI-App ist ein Programm, das im Terminal lebt: Befehle (todo add "Milch kaufen") mit Symfony Console und Vollbild-Textbildschirme (Listen, Felder, Fortschrittsbalken, Tastatur) mit symfony/tui. Dasselbe Projekt ergibt je eine ausführbare Datei für Linux, Windows und macOS.

Das Projekt anlegen

In der JumPHP IDE: New Project, dann CLI app. Auf der Kommandozeile:

bin/jumphp cli:new todo "Todo"
bin/jumphp install todo

Das Beispiel ist eine Aufgabenliste: src/Main.php (die Anwendung und ihre Befehle), src/Command/ (eine Klasse pro Befehl), src/Ui/ (die Vollbildschirme).

Starten und testen

bin/jumphp run todo                          # der Vollbildschirm, in diesem Terminal
bin/jumphp run todo add "Milch kaufen"        # ein Befehl
bin/jumphp test todo                         # php -l, phpstan, PHPUnit
bin/jumphp shot todo 2                       # der Bildschirm als Text: var/screenshots/screen.txt

Ohne Befehl öffnet die App ihren Bildschirm, wenn die Ausgabe ein Terminal ist, und gibt eine einfache Liste aus, wenn sie in eine Datei oder ein anderes Programm geht: Sie bleibt in Skripten nutzbar.

Die Tests spielen die Befehle (ApplicationTester) und die Bildschirme auf einem virtuellen Terminal (VirtualTerminal): Sie drücken Tasten und lesen, was der Benutzer sähe.

Die Daten

Die App legt ihre Daten im Ordner des Benutzers ab (~/.local/share/<id>, %APPDATA%\<id>, ~/Library/Application Support/<id>), während der Entwicklung in var/.

Verteilen

bin/jumphp export:standalone todo --linux --windows --macos

Eine ausführbare Datei pro System, nichts zu installieren; unter Windows ist es ein Konsolenprogramm. bin/jumphp installer todo erstellt auch Installer (Windows, Linux).

Unter Windows funktionieren die Befehle und die Vollbildschirme in jeder Konsole (Eingabeaufforderung, PowerShell, Windows Terminal).

Auf jumphp.net

Auf jumphp.net veröffentlicht, läuft die App in einem Terminal auf der Seite: Man tippt ihre Befehle, und sie antwortet wie in einem echten Terminal. Ihre Rückfragen warten auf die getippte Antwort (Strg+C bricht sie ab), ihre Vollbildschirme bekommen die Tasten einzeln (Pfeile, Enter, Escape). Das Gerüst macht das schon: src/Ui/WebTerminal.php und src/Ui/WebLoop.php, gewählt von WindowsTerminal::create(), wenn JUMPHP_WEB_TERMINAL gleich 1 ist. Ihre Daten (var/) bleiben im Browser des Besuchers.