Интеграция консольной области выполнения для Componenta-приложений. Пакет связывает componenta/app с Symfony Console, регистрирует консольные целевые объекты загрузки, предоставляет реестр команд и добавляет команды обслуживания приложения.
Используйте этот пакет, когда приложению нужны CLI-команды. Базовое ядро приложения находится в componenta/app.
composer require componenta/app-consoleПакет публикует Componenta\App\Console\ConfigProvider через метаданные Composer, поэтому componenta/composer-plugin может добавить его в сгенерированный файл провайдеров.
Пакет требует PHP ^8.4, componenta/app, componenta/class-finder, componenta/config, componenta/di, componenta/error-handler, componenta/path-resolver, componenta/reflection, componenta/var-export, PSR-11, PSR-3, Symfony Console, Symfony EventDispatcher и Symfony Lock.
ConfigProvider регистрирует:
| Сервис или ключ конфигурации | Назначение |
|---|---|
ConfigKey::APP_BY_SCOPE[Scope::CLI->value] |
Связывает область Scope::CLI непосредственно с App::class. |
ConsoleBootTargetAdapter |
Адаптирует консольное приложение к целевому объекту загрузки. |
ConsoleBootloader |
Загружает команды в реестр Symfony Console. |
ConsoleCommandRegistryInterface |
Псевдоним на ConsoleCommandRegistry. |
EventDispatcherFactoryInterface |
Фабрика диспетчеров событий Symfony Console. |
ConfigKey::COMMANDS |
Список entry id команд, которые регистрируют пакеты или приложение. |
ConsoleBootloader работает только в консольной области. Он читает все entry id команд из Componenta\App\Console\ConfigKey::COMMANDS, получает команды из контейнера и регистрирует их в Symfony Console.
В режиме разработки загрузчик дополнительно проходит по итератору найденных классов и ищет Symfony-атрибут #[AsCommand]. Если тот же класс уже зарегистрирован через конфигурацию, повторной регистрации не будет. В боевом режиме обнаружение атрибутов отключено: команды должны быть в собранной конфигурации.
Команды приложения можно добавлять в config/console.php, если этот файл подключен к общему графу конфигурации:
use App\Console\ImportPostsCommand;
use Componenta\App\Console\ConfigKey;
return [
ConfigKey::COMMANDS => [
ImportPostsCommand::class,
],
];Пакеты должны добавлять свои команды через собственный ConfigProvider в тот же ключ.
Пакет регистрирует:
| Команда | Назначение |
|---|---|
app:build |
Записывает кеши конфигурации и контейнера, собирает известные корни автоматической сборки и создаёт лениво подключаемые шарды фабрик с именами по содержимому. Команда должна запускаться с APP_ENV=development. |
app:preload |
Генерирует preload.php из существующих сборочных артефактов. |
app:cache:clear |
Очищает каталоги сборочного, dev- и runtime-кеша. Опции --build, --dev, --runtime ограничивают область очистки. |
app:build заново загружает исходную конфигурацию из стандартного config/config.php и создаёт отдельный build-container с отключённым кешированием. Текущая прогретая dev-конфигурация не подмешивается в результат, поэтому удалённые маршруты, обработчики и значения compile delta не попадут в новый production artifact.
Discovery финализируется один раз, после чего все listener compilers и зарегистрированные cache contributors получают один и тот же снимок исходных данных. Пустые массивы, null и стандартные значения false не записываются. Обязательный маркер версии, например пустая CQRS map v2 ['version' => 2], сохраняется, потому что это не пустая секция. Build-only реестры и #[DevOnly] listeners удаляются из production-конфигурации; если runtime-listeners не осталось, таблица discovery-классов также не записывается.
Скомпилированные фабрики записываются в обычную секцию dependencies.factories, причём явно настроенные фабрики приложения имеют приоритет. Шарды подключаются при первом обращении, SHA-256 исходников во время запуска не вычисляется. Повторяйте app:build после изменений провайдеров, обнаруживаемых PHP-классов, маршрутов, метаданных CQRS, расширений DI или зависимостей развертывания.
ConsoleCommandRegistryInterfaceхранит команды консольного приложения.ConsoleBootTargetInterfaceявляется целевым объектом загрузки для пакетов, которые добавляют команды.InputFactoryInterface,OutputFactoryInterfaceиIOFactoryадаптируют ввод и вывод Symfony Console.ConfigKey::COMMANDSявляется production-safe точкой регистрации команд.
componenta/appописывает области выполнения, выбор приложения и загрузчики.componenta/error-handlerдает контракты обработки ошибок, которые используют консольные слушатели.componenta/cycle-appдобавляет командыdb:*.componenta/router-appдобавляетrouter:list.