@@ -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
@@ -65,37 +135,41 @@ want a command to create a user::
65135 }
66136
67137Configuring the Command
68- -----------------------
138+ ~~~~~~~~~~~~~~~~~~~~~~~
69139
70140You can optionally define a description, help message and the
71- :doc: `input options and arguments </console/input >`::
141+ :doc: `input options and arguments </console/input >` by overriding the
142+ ``configure() `` method::
72143
73- // ...
74- // the command description shown when running "php bin/console list"
75- protected static $defaultDescription = 'Creates a new user.';
144+ // src/Command/CreateUserCommand.php
76145
77146 // ...
78- protected function configure(): void
147+ class CreateUserCommand extends Command
79148 {
80- $this
81- // If you don't like using the $defaultDescription static property,
82- // you can also define the short description using this method:
83- // ->setDescription('...')
149+ // the command description shown when running "php bin/console list"
150+ protected static $defaultDescription = 'Creates a new user.';
84151
85- // the command help shown when running the command with the "--help" option
86- ->setHelp('This command allows you to create a user...')
87- ;
152+ // ...
153+ protected function configure(): void
154+ {
155+ $this
156+ // the command help shown when running the command with the "--help" option
157+ ->setHelp('This command allows you to create a user...')
158+ ;
159+ }
88160 }
89161
90- Defining the ``$defaultDescription `` static property instead of using the
91- ``setDescription() `` method allows to get the command description without
92- instantiating its class. This makes the ``php bin/console list `` command run
93- much faster.
162+ .. tip ::
163+
164+ Defining the ``$defaultDescription `` static property instead of using the
165+ ``setDescription() `` method allows to get the command description without
166+ instantiating its class. This makes the ``php bin/console list `` command run
167+ much faster.
94168
95- If you want to always run the ``list `` command fast, add the ``--short `` option
96- to it (``php bin/console list --short ``). This will avoid instantiating command
97- classes, but it won't show any description for commands that use the
98- ``setDescription() `` method instead of the static property.
169+ If you want to always run the ``list `` command fast, add the ``--short `` option
170+ to it (``php bin/console list --short ``). This will avoid instantiating command
171+ classes, but it won't show any description for commands that use the
172+ ``setDescription() `` method instead of the static property.
99173
100174The ``configure() `` method is called automatically at the end of the command
101175constructor. If your command defines its own constructor, set the properties
@@ -130,7 +204,7 @@ available in the ``configure()`` method::
130204 }
131205
132206Registering the Command
133- -----------------------
207+ ~~~~~~~~~~~~~~~~~~~~~~~
134208
135209In PHP 8 and newer versions, you can register the command by adding the
136210``AsCommand `` attribute to it::
@@ -141,6 +215,8 @@ In PHP 8 and newer versions, you can register the command by adding the
141215 use Symfony\Component\Console\Attribute\AsCommand;
142216 use Symfony\Component\Console\Command\Command;
143217
218+ // the "name" and "description" arguments of AsCommand replace the
219+ // static $defaultName and $defaultDescription properties
144220 #[AsCommand(
145221 name: 'app:create-user',
146222 description: 'Creates a new user.',
@@ -157,8 +233,8 @@ If you can't use PHP attributes, register the command as a service and
157233:ref: `default services.yaml configuration <service-container-services-load-example >`,
158234this is already done for you, thanks to :ref: `autoconfiguration <services-autoconfigure >`.
159235
160- Executing the Command
161- ---------------------
236+ Running the Command
237+ ~~~~~~~~~~~~~~~~~~~
162238
163239After configuring and registering the command, you can run it in the terminal:
164240
@@ -440,7 +516,7 @@ call ``setAutoExit(false)`` on it to get the command result in ``CommandTester``
440516
441517 $application = new Application();
442518 $application->setAutoExit(false);
443-
519+
444520 $tester = new ApplicationTester($application);
445521
446522.. note ::
0 commit comments