Команда script
script (алиас sc) запускает ваши консольные классы: резолвит имя из точечной
нотации в класс, проверяет, что он наследует Cmd/CmdCustom, и выполняет его. Так
запускаются разовые скрипты и проектные задачи.
Что такое script и зачем
script — команда запуска пользовательских консольных классов.
Проблема. Не каждая задача заслуживает первоклассной команды в call help:
разовый импорт, сидер, обслуживающий скрипт. Нужен способ запустить любой класс из
проекта как консольную команду.
Решение. Напишите класс на базе CmdCustom и запускайте его через call sc <путь.Класс> — с той же DI и разбором аргументов, что у встроенных команд. Об этом
и раздел.
Субкоманды
| Субкоманда | Назначение |
|---|---|
list |
Показать все классы Cmd/CmdCustom, помеченные типом |
<dot.notation.Class> [args] [-flags] [--options] |
Запустить класс |
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:
php call make -n .SeedUsers # → main/SeedUsers.php (CmdCustom)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. Различия — в обзоре консоли.
Дальше
- Консоль — обзор —
CmdvsCmdCustom, DI,Printer - make — скаффолд
-n - thread — запуск фоновых задач