@@ -9,15 +9,90 @@ The Symfony framework provides lots of commands through the ``bin/console`` scri
9
9
created with the :doc: `Console component </components/console >`. You can also
10
10
use it to create your own commands.
11
11
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
+ ~~~~~~~~~~~~~~~~~~~
14
43
15
44
Console commands run in the :ref: `environment <config-dot-env >` defined in the ``APP_ENV ``
16
45
variable of the ``.env `` file, which is ``dev `` by default. It also reads the ``APP_DEBUG ``
17
46
value to turn "debug" mode on or off (it defaults to ``1 ``, which is on).
18
47
19
48
To 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 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 build 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
21
96
22
97
Creating a Command
23
98
------------------
@@ -38,11 +113,6 @@ want a command to create a user::
38
113
// the name of the command (the part after "bin/console")
39
114
protected static $defaultName = 'app:create-user';
40
115
41
- protected function configure(): void
42
- {
43
- // ...
44
- }
45
-
46
116
protected function execute(InputInterface $input, OutputInterface $output): int
47
117
{
48
118
// ... put here the code to create the user
@@ -74,37 +144,41 @@ want a command to create a user::
74
144
The ``Command::INVALID `` constant was introduced in Symfony 5.3
75
145
76
146
Configuring the Command
77
- -----------------------
147
+ ~~~~~~~~~~~~~~~~~~~~~~~
78
148
79
149
You 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::
81
152
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
85
154
86
155
// ...
87
- protected function configure(): void
156
+ class CreateUserCommand extends Command
88
157
{
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.';
93
160
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
+ }
97
169
}
98
170
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.
103
177
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.
108
182
109
183
.. versionadded :: 5.3
110
184
@@ -144,7 +218,7 @@ available in the ``configure()`` method::
144
218
}
145
219
146
220
Registering the Command
147
- -----------------------
221
+ ~~~~~~~~~~~~~~~~~~~~~~~
148
222
149
223
In PHP 8 and newer versions, you can register the command by adding the
150
224
``AsCommand `` attribute to it::
@@ -155,6 +229,8 @@ In PHP 8 and newer versions, you can register the command by adding the
155
229
use Symfony\Component\Console\Attribute\AsCommand;
156
230
use Symfony\Component\Console\Command\Command;
157
231
232
+ // the "name" and "description" arguments of AsCommand replace the
233
+ // static $defaultName and $defaultDescription properties
158
234
#[AsCommand(
159
235
name: 'app:create-user',
160
236
description: 'Creates a new user.',
@@ -176,8 +252,8 @@ If you can't use PHP attributes, register the command as a service and
176
252
:ref: `default services.yaml configuration <service-container-services-load-example >`,
177
253
this is already done for you, thanks to :ref: `autoconfiguration <services-autoconfigure >`.
178
254
179
- Executing the Command
180
- ---------------------
255
+ Running the Command
256
+ ~~~~~~~~~~~~~~~~~~~
181
257
182
258
After configuring and registering the command, you can run it in the terminal:
183
259
@@ -468,7 +544,7 @@ call ``setAutoExit(false)`` on it to get the command result in ``CommandTester``
468
544
469
545
$application = new Application();
470
546
$application->setAutoExit(false);
471
-
547
+
472
548
$tester = new ApplicationTester($application);
473
549
474
550
.. note ::
0 commit comments