CLI · Winter Console

Команда script

script (алиас sc) запускает ваши консольные классы: резолвит имя из точечной нотации в класс, проверяет, что он наследует Cmd/CmdCustom, и выполняет его. Так запускаются разовые скрипты и проектные задачи.

Алиас scЗапуск call sc dot.ClassБаза Cmd / CmdCustom

Что такое script и зачем

script — команда запуска пользовательских консольных классов.

Проблема. Не каждая задача заслуживает первоклассной команды в call help: разовый импорт, сидер, обслуживающий скрипт. Нужен способ запустить любой класс из проекта как консольную команду.

Решение. Напишите класс на базе CmdCustom и запускайте его через call sc <путь.Класс> — с той же DI и разбором аргументов, что у встроенных команд. Об этом и раздел.

Субкоманды

Субкоманда Назначение
list Показать все классы Cmd/CmdCustom, помеченные типом
<dot.notation.Class> [args] [-flags] [--options] Запустить класс
bash
php call sc list
php call sc app.console.SeedUsers
php call sc app.console.SeedUsers --count=100 --reset

Как резолвится имя

Точечная нотация превращается в FQCN: ./, каждый сегмент через ucfirst, затем /\. Аргументы, флаги и опции после имени класса передаются в его ::script(). Если класс не найден или не наследует Cmd/CmdCustom — команда предупредит, показав вычисленный FQCN.

Своя команда

Скаффолд разовой команды — флагом -n у make:

bash
php call make -n .SeedUsers   # → main/SeedUsers.php (CmdCustom)
main/SeedUsers.php
use Flytachi\Winter\Console\Inc\CmdCustom;

class SeedUsers extends CmdCustom
{
  #[Autowired] private UserRepository $repo;

  public function handle(): void
  {
      $count = (int) ($this->args['options']['count'] ?? 10);
      // ... заполнение
      self::printSuccess("Seeded {$count} users");
  }
}

Cmd против CmdCustom

CmdCustom не виден в call help и запускается только через call sc. Если команда должна быть первоклассной (в списке help, запуск call <name>) — наследуйте Cmd. Различия — в обзоре консоли.

Дальше