Skip to content

Commit e0d1b35

Browse files
HeahDudejaviereguiluz
authored andcommitted
[Console] Improve console events doc
1 parent a39bbc7 commit e0d1b35

File tree

3 files changed

+31
-16
lines changed

3 files changed

+31
-16
lines changed

components/console/events.rst

+4-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ the wheel, it uses the Symfony EventDispatcher component to do the work::
1717
.. caution::
1818

1919
Console events are only triggered by the main command being executed.
20-
Commands called by the main command will not trigger any event.
20+
Commands called by the main command will not trigger any event, unless
21+
run by the application itself, see :doc:`/console/calling_commands`.
2122

2223
The ``ConsoleEvents::COMMAND`` Event
2324
------------------------------------
@@ -171,10 +172,10 @@ Listeners receive a
171172
use Symfony\Component\Console\Event\ConsoleSignalEvent;
172173

173174
$dispatcher->addListener(ConsoleEvents::SIGNAL, function (ConsoleSignalEvent $event) {
174-
175+
175176
// gets the signal number
176177
$signal = $event->getHandlingSignal();
177-
178+
178179
if (\SIGINT === $signal) {
179180
echo "bye bye!";
180181
}

console.rst

+6
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,12 @@ registers an :doc:`event subscriber </event_dispatcher>` to listen to the
574574
:ref:`ConsoleEvents::TERMINATE event <console-events-terminate>` and adds a log
575575
message whenever a command doesn't finish with the ``0`` `exit status`_.
576576

577+
Using Events And Handling Signals
578+
---------------------------------
579+
580+
When a command is running, many events are dispatched, one of them allows to
581+
react to signals, read more in :doc:`this section </components/console/events>`.
582+
577583
Learn More
578584
----------
579585

console/calling_commands.rst

+21-13
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ or if you want to create a "meta" command that runs a bunch of other commands
88
changed on the production servers: clearing the cache, generating Doctrine
99
proxies, dumping web assets, ...).
1010

11-
Use the :method:`Symfony\\Component\\Console\\Application::find` method to
12-
find the command you want to run by passing the command name. Then, create a
13-
new :class:`Symfony\\Component\\Console\\Input\\ArrayInput` with the
14-
arguments and options you want to pass to the command.
11+
Use the :method:`Symfony\\Component\\Console\\Application::doRun`. Then, create
12+
a new :class:`Symfony\\Component\\Console\\Input\\ArrayInput` with the
13+
arguments and options you want to pass to the command. The command name must be
14+
the first argument.
1515

16-
Eventually, calling the ``run()`` method actually runs the command and returns
17-
the returned code from the command (return value from command's ``execute()``
16+
Eventually, calling the ``doRun()`` method actually runs the command and returns
17+
the returned code from the command (return value from command ``execute()``
1818
method)::
1919

2020
// ...
@@ -29,15 +29,14 @@ method)::
2929

3030
protected function execute(InputInterface $input, OutputInterface $output): int
3131
{
32-
$command = $this->getApplication()->find('demo:greet');
33-
34-
$arguments = [
32+
$greetInput = new ArrayInput([
33+
// the command name is passed as first argument
34+
'command' => 'demo:greet',
3535
'name' => 'Fabien',
3636
'--yell' => true,
37-
];
37+
]);
3838

39-
$greetInput = new ArrayInput($arguments);
40-
$returnCode = $command->run($greetInput, $output);
39+
$returnCode = $this->getApplication()->doRun($greetInput, $output);
4140

4241
// ...
4342
}
@@ -47,7 +46,16 @@ method)::
4746

4847
If you want to suppress the output of the executed command, pass a
4948
:class:`Symfony\\Component\\Console\\Output\\NullOutput` as the second
50-
argument to ``$command->run()``.
49+
argument to ``$application->doRun()``.
50+
51+
.. note::
52+
53+
Using ``doRun()`` instead of ``run()`` prevents autoexiting and allows to
54+
return the exit code instead.
55+
56+
Also, using ``$this->getApplication()->doRun()`` instead of
57+
``$this->getApplication()->find('demo:greet')->run()`` will allow proper
58+
events to be dispatched for that inner command as well.
5159

5260
.. caution::
5361

0 commit comments

Comments
 (0)