@@ -9,15 +9,90 @@ The Symfony framework provides lots of commands through the ``bin/console`` scri
99created with the :doc: `Console component </components/console >`. You can also
1010use it to create your own commands.
1111
12- The Console: APP_ENV & APP_DEBUG
13- ---------------------------------
12+ Running Commands
13+ ----------------
14+
15+ Each Symfony application comes with a large set of commands. You can use
16+ the ``list `` command to view all available commands in the application:
17+
18+ .. code-block :: terminal
19+
20+ $ php bin/console list
21+ ...
22+
23+ Available commands:
24+ about Display information about the current project
25+ completion Dump the shell completion script
26+ help Display help for a command
27+ list List commands
28+ assets
29+ assets:install Install bundle's web assets under a public directory
30+ cache
31+ cache:clear Clear the cache
32+ ...
33+
34+ If you find the command you need, you can run it with the ``--help `` option
35+ to view the command's documentation:
36+
37+ .. code-block :: terminal
38+
39+ $ php bin/console assets:install --help
40+
41+ APP_ENV & APP_DEBUG
42+ ~~~~~~~~~~~~~~~~~~~
1443
1544Console commands run in the :ref: `environment <config-dot-env >` defined in the ``APP_ENV ``
1645variable of the ``.env `` file, which is ``dev `` by default. It also reads the ``APP_DEBUG ``
1746value to turn "debug" mode on or off (it defaults to ``1 ``, which is on).
1847
1948To run the command in another environment or debug mode, edit the value of ``APP_ENV ``
20- and ``APP_DEBUG ``.
49+ and ``APP_DEBUG ``. You can also define this env vars when running the
50+ command, for instance:
51+
52+ .. code-block :: terminal
53+
54+ # clears the cache for the prod environment
55+ $ APP_ENV=prod php bin/console cache:clear
56+
57+ .. _console-completion-setup :
58+
59+ Console Completion
60+ ~~~~~~~~~~~~~~~~~~
61+
62+ .. versionadded :: 5.4
63+
64+ Console completion for Bash was introduced in Symfony 5.4.
65+
66+ If you are using the Bash shell, you can install Symfony's completion
67+ script to get auto completion when typing commands in the terminal. All
68+ commands support name and option completion, and some can even complete
69+ values.
70+
71+ .. image :: /_images/components/console/completion.gif
72+
73+ First, make sure you installed and setup the "bash completion" package for
74+ your OS (typically named ``bash-completion ``). Then, install the Symfony
75+ completion bash script *once * by running the ``completion `` command in a
76+ Symfony app installed on your computer:
77+
78+ .. code-block :: terminal
79+
80+ $ php bin/console completion bash | sudo tee /etc/bash_completion.d/console-events-terminate
81+ # after the installation, restart the shell
82+
83+ Now you are all set to use the auto completion for all Symfony Console
84+ applications on your computer. By default, you can get a list of complete
85+ options by pressing the Tab key.
86+
87+ .. tip ::
88+
89+ Many PHP tools are built using the Symfony Console component (e.g.
90+ Composer, PHPstan and Behat). If they are using version 5.4 or higher,
91+ you can also install their completion script to enable console completion:
92+
93+ .. code-block :: terminal
94+
95+ $ php vendor/bin/phpstan completion bash | sudo tee /etc/bash_completion.d/phpstan
2196
2297 Creating a Command
2398------------------
@@ -38,11 +113,6 @@ want a command to create a user::
38113 // the name of the command (the part after "bin/console")
39114 protected static $defaultName = 'app:create-user';
40115
41- protected function configure(): void
42- {
43- // ...
44- }
45-
46116 protected function execute(InputInterface $input, OutputInterface $output): int
47117 {
48118 // ... put here the code to create the user
@@ -74,37 +144,41 @@ want a command to create a user::
74144 The ``Command::INVALID `` constant was introduced in Symfony 5.3
75145
76146Configuring the Command
77- -----------------------
147+ ~~~~~~~~~~~~~~~~~~~~~~~
78148
79149You can optionally define a description, help message and the
80- :doc: `input options and arguments </console/input >`::
150+ :doc: `input options and arguments </console/input >` by overriding the
151+ ``configure() `` method::
81152
82- // ...
83- // the command description shown when running "php bin/console list"
84- protected static $defaultDescription = 'Creates a new user.';
153+ // src/Command/CreateUserCommand.php
85154
86155 // ...
87- protected function configure(): void
156+ class CreateUserCommand extends Command
88157 {
89- $this
90- // If you don't like using the $defaultDescription static property,
91- // you can also define the short description using this method:
92- // ->setDescription('...')
158+ // the command description shown when running "php bin/console list"
159+ protected static $defaultDescription = 'Creates a new user.';
93160
94- // the command help shown when running the command with the "--help" option
95- ->setHelp('This command allows you to create a user...')
96- ;
161+ // ...
162+ protected function configure(): void
163+ {
164+ $this
165+ // the command help shown when running the command with the "--help" option
166+ ->setHelp('This command allows you to create a user...')
167+ ;
168+ }
97169 }
98170
99- Defining the ``$defaultDescription `` static property instead of using the
100- ``setDescription() `` method allows to get the command description without
101- instantiating its class. This makes the ``php bin/console list `` command run
102- much faster.
171+ .. tip ::
172+
173+ Defining the ``$defaultDescription `` static property instead of using the
174+ ``setDescription() `` method allows to get the command description without
175+ instantiating its class. This makes the ``php bin/console list `` command run
176+ much faster.
103177
104- If you want to always run the ``list `` command fast, add the ``--short `` option
105- to it (``php bin/console list --short ``). This will avoid instantiating command
106- classes, but it won't show any description for commands that use the
107- ``setDescription() `` method instead of the static property.
178+ If you want to always run the ``list `` command fast, add the ``--short `` option
179+ to it (``php bin/console list --short ``). This will avoid instantiating command
180+ classes, but it won't show any description for commands that use the
181+ ``setDescription() `` method instead of the static property.
108182
109183.. versionadded :: 5.3
110184
@@ -144,7 +218,7 @@ available in the ``configure()`` method::
144218 }
145219
146220Registering the Command
147- -----------------------
221+ ~~~~~~~~~~~~~~~~~~~~~~~
148222
149223In PHP 8 and newer versions, you can register the command by adding the
150224``AsCommand `` attribute to it::
@@ -155,6 +229,8 @@ In PHP 8 and newer versions, you can register the command by adding the
155229 use Symfony\Component\Console\Attribute\AsCommand;
156230 use Symfony\Component\Console\Command\Command;
157231
232+ // the "name" and "description" arguments of AsCommand replace the
233+ // static $defaultName and $defaultDescription properties
158234 #[AsCommand(
159235 name: 'app:create-user',
160236 description: 'Creates a new user.',
@@ -176,8 +252,8 @@ If you can't use PHP attributes, register the command as a service and
176252:ref: `default services.yaml configuration <service-container-services-load-example >`,
177253this is already done for you, thanks to :ref: `autoconfiguration <services-autoconfigure >`.
178254
179- Executing the Command
180- ---------------------
255+ Running the Command
256+ ~~~~~~~~~~~~~~~~~~~
181257
182258After configuring and registering the command, you can run it in the terminal:
183259
@@ -468,7 +544,7 @@ call ``setAutoExit(false)`` on it to get the command result in ``CommandTester``
468544
469545 $application = new Application();
470546 $application->setAutoExit(false);
471-
547+
472548 $tester = new ApplicationTester($application);
473549
474550.. note ::
0 commit comments