CLI · Winter Console

Консоль — обзор

У каждого проекта Winter есть один бинарник — call. Он диспетчеризует запуск во встроенные команды (генерация кода, конфиг, сервер, миграции, threads) и в ваши собственные. Всё под единым разбором аргументов, флагов и опций.

Бинарник callВход Boot::cli($argv)Свои команды Cmd / CmdCustom

Что такое консоль и зачем

Консоль — интерфейс командной строки фреймворка: единая точка для служебных задач вокруг проекта.

Проблема. Разработке нужен не только веб-цикл: сгенерировать класс, поднять сервер, накатить схему, собрать кеши, запустить фоновую задачу, разово прогнать скрипт. Без единого инструмента это набор разрозненных ad-hoc скриптов.

Решение. Winter даёт один бинарник call с набором встроенных команд и простым способом добавить свои — с тем же разбором аргументов и той же DI. Об этом и раздел.

Анатомия вызова

bash
call <команда> [суб] [аргументы...] [-флаги] [--опции[=значение]]

Разбор (CoreHandle::parser) раскладывает $argv на три корзины:

Корзина Источник Пример
arguments позиционные токены call make .Usermake, .User
flags -x (одиночные буквы) -csrc, s, r
options --key или --key=v --port=8000, --mvc

Первый позиционный аргумент — имя команды; без него запускается help. Имя резолвится в класс Console\Command\<Name>. Есть два коротких алиаса:

Алиас Команда
sc Script
th Thread

Встроенные команды

Команда Назначение Страница
help Список команд и справка
make Генерация компонентов make
cfg Конфиг, .env, ключ, Docker, автодополнение cfg
run Запуск HTTP-сервера (Swoole / dev) run
db Пинг / миграции / предпросмотр SQL db
mapping Кеш маршрутов: build / clean / show mapping
storage Инициализация и очистка storage/ storage
script Запуск своих Cmd/CmdCustom (алиас sc) script
thread Запуск Dispatchable-задач (алиас th) thread
di Кеш DI-сканера: build / clean / show di

Своя команда

Команда — класс, наследующий Cmd, с тремя контрактными точками:

php
use Flytachi\Winter\Console\Inc\Cmd;

class Sync extends Cmd
{
  public static string $title = "sync external data";  // строка в списке help

  public function handle(): void
  {
      // тело команды — читаем $this->args['arguments'|'flags'|'options']
  }

  public static function help(): void
  {
      // печатается при call help sync и при -h / --help
  }
}
Член Роль
static $title Однострочное описание в call help
handle() Собственно работа
static help() Подробная справка (call help <cmd> и -h)

DI в командах

Команда создаётся через контейнер (Container::make), поэтому внедрение через конструктор и #[Autowired] работает как в контроллерах:

php
class Sync extends Cmd
{
  #[Autowired] private MyService $service;

  public function handle(): void
  {
      $this->service->run();
  }
}

Cmd vs CmdCustom

Аспект Cmd CmdCustom
Виден в call help да нет
Запуск call <name> call sc <dot.Path.Class>
Для чего первоклассные команды разовые проектные скрипты

Скаффолд: php call make -n .Sync. Подробнее о запуске своих скриптов — на странице script.

Вывод — Printer

Команды пишут через статические хелперы Printer (единый цветной формат) — не через echo:

Хелпер Назначение
printSuccess() / printError() [✓] успех / блок ошибки
printInfo() / printWarning() [i] инфо / [!] предупреждение
printKeyValue() выровненная пара ключ → значение
printStep() индикатор прогресса [3/12]
printTitle() / printList() баннер раздела / список

Справка и автодополнение

bash
call help              # список всех команд + окружение
call help make         # справка по команде
call make -h           # то же через флаг
call cfg completion -i # установить автодополнение zsh/bash

Дальше

  • make — генераторы кода
  • run — запуск сервера
  • script — свои команды и скрипты