# Console ## Компоненты | Файл | Класс | Описание | |---|---|---| | `src/Console/ConsoleApplication.php` | `ConsoleApplication` | Точка входа: парсит argv, матчит команду, запускает handler | | `src/Console/ConsoleRouter.php` | `ConsoleRouter` | Аналог HTTP Router для консольных команд | | `src/Console/ConsoleDefinition.php` | `ConsoleDefinition` | signature, handler class, description, options[] | | `src/Console/OptionDefinition.php` | `OptionDefinition` | name, description, default (false = флаг) | | `src/Console/ConsoleInput.php` | `ConsoleInput` | Распарсенные path params + options | | `src/Console/ConsoleOutput.php` | `ConsoleOutput` | Вывод, exit code | | `src/Console/ConsoleMatch.php` | `ConsoleMatch` | Результат матчинга (аналог RouteMatch) | ## ConsoleDefinition ```php new ConsoleDefinition( signature: 'users:create {role}', // {param} — path param из сигнатуры handler: CreateUserCommand::class, description: 'Create a new user', options: [ new OptionDefinition('dry-run', 'Do not persist', false), // флаг (default=false) new OptionDefinition('email', 'User email', null), // опция (default=null) ], ) ``` ## Handler Invokable-класс, резолвится через DI: ```php final class CreateUserCommand { public function __invoke(ConsoleInput $input, ConsoleOutput $output): void { $role = $input->pathParams['role']; $dryRun = $input->option('dry-run'); // bool для флагов $email = $input->option('email'); // string|null для опций $output->writeln('Done'); $output->setExitCode(0); } } ``` ## Запуск ```php // bin/console Kernel::boot(__DIR__ . '/..'); $app = Kernel::container()->get(ConsoleApplication::class); exit($app->run($argv)); ``` Команды: `bin/console [--option=value] [--flag]` Help: `bin/console help` или `bin/console help ` ## Argv parsing `ConsoleInput::parse($commandStr, $pathParams, $args, $options)`: - `$args` = `array_slice($argv, 2)` (после имени команды) - `--name=value` → опция - `--name` без `=` → флаг (true)