<?php/* * This file is part of the Symfony MakerBundle package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Bundle\MakerBundle\Event;use Symfony\Bundle\MakerBundle\Exception\RuntimeCommandException;use Symfony\Component\Console\ConsoleEvents;use Symfony\Component\Console\Event\ConsoleErrorEvent;use Symfony\Component\Console\Event\ConsoleTerminateEvent;use Symfony\Component\Console\Style\SymfonyStyle;use Symfony\Component\EventDispatcher\EventSubscriberInterface;/** * Prints certain exceptions in a pretty way and silences normal exception handling. * * @author Ryan Weaver <ryan@knpuniversity.com> */final class ConsoleErrorSubscriber implements EventSubscriberInterface{ private bool $setExitCode = false; public function onConsoleError(ConsoleErrorEvent $event): void { if (!$event->getError() instanceof RuntimeCommandException) { return; } // prevent any visual logging from appearing $event->stopPropagation(); // prevent the exception from actually being thrown $event->setExitCode(0); $this->setExitCode = true; $io = new SymfonyStyle($event->getInput(), $event->getOutput()); $io->error($event->getError()->getMessage()); } public function onConsoleTerminate(ConsoleTerminateEvent $event): void { if (!$this->setExitCode) { return; } // finally set a non-zero exit code $event->setExitCode(1); } public static function getSubscribedEvents(): array { return [ ConsoleEvents::ERROR => 'onConsoleError', ConsoleEvents::TERMINATE => 'onConsoleTerminate', ]; }}