Créer une application en ligne de commande
Une application CLI JumPHP est un programme qui vit dans le terminal : des commandes (todo add "Acheter du lait") écrites avec Symfony Console, et des écrans plein écran en texte (listes, champs, barres de progression, clavier) avec symfony/tui. Le même projet donne un exécutable pour Linux, Windows et macOS.
Créer le projet
Dans le JumPHP IDE : New Project, puis CLI app. En ligne de commande :
bin/jumphp cli:new todo "Todo"
bin/jumphp install todo
L'exemple est une liste de tâches : src/Main.php (l'application et ses commandes), src/Command/ (une classe par commande), src/Ui/ (les écrans plein écran).
Lancer et tester
bin/jumphp run todo # l'écran plein écran, dans ce terminal
bin/jumphp run todo add "Acheter du lait" # une commande
bin/jumphp test todo # php -l, phpstan, PHPUnit
bin/jumphp shot todo 2 # l'écran en texte : var/screenshots/screen.txt
Sans commande, l'application ouvre son écran quand la sortie est un terminal, et affiche une simple liste quand elle va dans un fichier ou un autre programme : elle reste utilisable dans des scripts.
Les tests jouent les commandes (ApplicationTester) et les écrans sur un terminal virtuel (VirtualTerminal) : ils tapent des touches et lisent ce que l'utilisateur verrait.
Les données
L'application range ses données dans le dossier de l'utilisateur (~/.local/share/<id>, %APPDATA%\<id>, ~/Library/Application Support/<id>), et dans var/ pendant le développement.
Distribuer
bin/jumphp export:standalone todo --linux --windows --macos
Un exécutable par système, sans rien à installer ; sous Windows, c'est un programme console. bin/jumphp installer todo en fait aussi des installeurs (Windows, Linux).
Sous Windows, les commandes et les écrans plein écran marchent dans n'importe quelle console (l'invite de commandes, PowerShell, Windows Terminal).
Sur jumphp.net
Publiée sur jumphp.net, l'appli se joue dans un terminal de la page : on tape ses commandes, elle répond comme dans un vrai terminal. Ses questions attendent la réponse tapée (Ctrl+C les annule) et ses écrans plein écran reçoivent les touches une à une (flèches, Entrée, Échap). Le squelette le fait déjà : src/Ui/WebTerminal.php et src/Ui/WebLoop.php, choisis par WindowsTerminal::create() quand JUMPHP_WEB_TERMINAL vaut 1. Ses données (var/) restent dans le navigateur du visiteur.