RU

Создать приложение командной строки

CLI-приложение JumPHP — это программа, которая работает в терминале: команды (todo add "Купить молоко") на Symfony Console и полноэкранные текстовые экраны (списки, поля, индикаторы прогресса, клавиатура) на symfony/tui. Из одного проекта получается исполняемый файл для Linux, Windows и macOS.

Создать проект

В JumPHP IDE: New Project, затем CLI app. В командной строке:

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

Пример — список задач: src/Main.php (приложение и его команды), src/Command/ (один класс на команду), src/Ui/ (полноэкранные экраны).

Запуск и тесты

bin/jumphp run todo                          # полноэкранный экран в этом терминале
bin/jumphp run todo add "Купить молоко"        # команда
bin/jumphp test todo                         # php -l, phpstan, PHPUnit
bin/jumphp shot todo 2                       # экран в виде текста: var/screenshots/screen.txt

Без команды приложение открывает свой экран, если вывод идёт в терминал, и печатает простой список, если вывод идёт в файл или другую программу: его можно использовать в скриптах.

Тесты выполняют команды (ApplicationTester) и экраны на виртуальном терминале (VirtualTerminal): нажимают клавиши и читают то, что увидел бы пользователь.

Данные

Приложение хранит данные в папке пользователя (~/.local/share/<id>, %APPDATA%\<id>, ~/Library/Application Support/<id>), а во время разработки — в var/.

Распространение

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

Один исполняемый файл на систему, ничего не нужно устанавливать; в Windows это консольная программа. bin/jumphp installer todo также создаёт установщики (Windows, Linux).

В Windows команды и полноэкранные экраны работают в любой консоли (командная строка, PowerShell, Windows Terminal).

На jumphp.net

Опубликованное на jumphp.net приложение работает в терминале на странице: там вводят его команды, и оно отвечает как в настоящем терминале. Его вопросы ждут введённого ответа (Ctrl+C отменяет их), а полноэкранные экраны получают клавиши по одной (стрелки, Enter, Escape). Каркас уже это делает: src/Ui/WebTerminal.php и src/Ui/WebLoop.php, их выбирает WindowsTerminal::create(), когда JUMPHP_WEB_TERMINAL равно 1. Его данные (var/) остаются в браузере посетителя.