В Symfony есть несколько способов контролировать статус выполнения консольной команды.
1. Использование встроенного класса Process: Symfony предоставляет класс Process, который позволяет запускать консольные команды из вашего кода. Чтобы контролировать статус выполнения команды, вы можете использовать методы Process, такие как isSuccessful(), getExitCode() и getExitCodeText(). Например:
use SymfonyComponentProcessProcess; $command = new Process(['ls', '-l']); $command->run(); if ($command->isSuccessful()) { echo 'Команда успешно выполнена'; } else { echo 'Возникла ошибка при выполнении команды'; echo $command->getErrorOutput(); }
2. Обработка исключений: Если консольная команда завершается с ошибкой, Symfony может сгенерировать исключение CommandFailedException. Чтобы перехватить и обработать это исключение, вы можете использовать блок try-catch. Например:
use SymfonyComponentConsoleCommandCommand; use SymfonyComponentConsoleExceptionCommandFailedException; use SymfonyComponentConsoleInputInputInterface; use SymfonyComponentConsoleOutputOutputInterface; class MyCommand extends Command { protected function execute(InputInterface $input, OutputInterface $output) { try { // Ваш код для выполнения команды } catch (CommandFailedException $exception) { $output->writeln('<error>Возникла ошибка при выполнении команды</error>'); $output->writeln($exception->getMessage()); } } }
3. Использование встроенных событий команды: Symfony также предоставляет механизм событий для управления и контроля выполнения команд. Вы можете подписаться на событие Command::TERMINATE, которое будет вызываться после завершения выполнения команды. Например:
use SymfonyComponentConsoleCommandCommand; use SymfonyComponentConsoleEventConsoleTerminateEvent; use SymfonyComponentConsoleInputInputInterface; use SymfonyComponentConsoleOutputOutputInterface; use SymfonyComponentEventDispatcherEventSubscriberInterface; class MySubscriber implements EventSubscriberInterface { public static function getSubscribedEvents() { return [ Command::TERMINATE => 'onTerminate', ]; } public function onTerminate(ConsoleTerminateEvent $event) { $input = $event->getInput(); $output = $event->getOutput(); if ($event->getExitCode() === 0) { $output->writeln('Команда успешно выполнена'); } else { $output->writeln('Возникла ошибка при выполнении команды'); } } } // Регистрация слушателя событий $command = new MyCommand(); $command->getEventDispatcher()->addSubscriber(new MySubscriber());
Это лишь несколько способов контролирования статуса выполнения консольной команды в Symfony. Однако в реальных проектах может быть еще больше вариантов и инструментов, в зависимости от ваших потребностей и настроек приложения.