Today, I'm about to write about one of the oldest feature requests for the Console component: the possibility to hook during the lifecycle of a command execution. I have been delaying this feature for a long time as I did not want to introduce a hard dependency between the Console component and the Event Dispatcher component.
But as of Symfony 2.3, you can listen to several events that are dispatched by the main console application:
1 2 3 4 5 6 7 8
use Symfony\Component\Console\Application;
use Symfony\Component\EventDispatcher\EventDispatcher;
$dispatcher = new EventDispatcher();
$application = new Application();
$application->setDispatcher($dispatcher);
$application->run();
Note that events are only dispatched if you inject an event dispatcher.
Three events are automatically dispatched:
ConsoleEvents::COMMAND
lets you do something before a command is executed;ConsoleEvents::TERMINATE
lets you perform some cleanup actions after the command has been executed;ConsoleEvents::EXCEPTION
lets you handle exceptions thrown during the execution of a command.
If you want to see some code example, read the full documentation about this new feature in the Console component documentation.
Nice! No more workarounds for console exception logging as was described in http://symfony.com/doc/master/cookbook/console/logging.html
Looks like the PR link is wrong, I think it should be: https://github.com/symfony/symfony/pull/7466
There is still 1 missing step for this feature: the SE does not inject the dispatcher