@@ -9,15 +9,86 @@ 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+ If you are using the Bash shell, you can install Symfony's completion
63+ script to get auto completion when typing commands in the terminal. All
64+ commands support name and option completion, and some can even complete
65+ values.
66+
67+ .. image :: /_images/components/console/completion.gif
68+
69+ First, make sure you installed and setup the "bash completion" package for
70+ your OS (typically named ``bash-completion ``). Then, install the Symfony
71+ completion bash script *once * by running the ``completion `` command in a
72+ Symfony app installed on your computer:
73+
74+ .. code-block :: terminal
75+
76+ $ php bin/console completion bash | sudo tee /etc/bash_completion.d/console-events-terminate
77+ # after the installation, restart the shell
78+
79+ Now you are all set to use the auto completion for all Symfony Console
80+ applications on your computer. By default, you can get a list of complete
81+ options by pressing the Tab key.
82+
83+ .. tip ::
84+
85+ Many PHP tools are built using the Symfony Console component (e.g.
86+ Composer, PHPstan and Behat). If they are using version 5.4 or higher,
87+ you can also install their completion script to enable console completion:
88+
89+ .. code-block :: terminal
90+
91+ $ php vendor/bin/phpstan completion bash | sudo tee /etc/bash_completion.d/phpstan
2192
2293 Creating a Command
2394------------------
@@ -40,11 +111,6 @@ want a command to create a user::
40111 {
41112 protected static $defaultName = 'app:create-user';
42113
43- protected function configure(): void
44- {
45- // ...
46- }
47-
48114 protected function execute(InputInterface $input, OutputInterface $output): int
49115 {
50116 // ... put here the code to create the user
@@ -67,37 +133,41 @@ want a command to create a user::
67133 }
68134
69135Configuring the Command
70- -----------------------
136+ ~~~~~~~~~~~~~~~~~~~~~~~
71137
72138You can optionally define a description, help message and the
73- :doc: `input options and arguments </console/input >`::
139+ :doc: `input options and arguments </console/input >` by overriding the
140+ ``configure() `` method::
74141
75- // ...
76- // the command description shown when running "php bin/console list"
77- protected static $defaultDescription = 'Creates a new user.';
142+ // src/Command/CreateUserCommand.php
78143
79144 // ...
80- protected function configure(): void
145+ class CreateUserCommand extends Command
81146 {
82- $this
83- // If you don't like using the $defaultDescription static property,
84- // you can also define the short description using this method:
85- // ->setDescription('...')
147+ // the command description shown when running "php bin/console list"
148+ protected static $defaultDescription = 'Creates a new user.';
86149
87- // the command help shown when running the command with the "--help" option
88- ->setHelp('This command allows you to create a user...')
89- ;
150+ // ...
151+ protected function configure(): void
152+ {
153+ $this
154+ // the command help shown when running the command with the "--help" option
155+ ->setHelp('This command allows you to create a user...')
156+ ;
157+ }
90158 }
91159
92- Defining the ``$defaultDescription `` static property instead of using the
93- ``setDescription() `` method allows to get the command description without
94- instantiating its class. This makes the ``php bin/console list `` command run
95- much faster.
160+ .. tip ::
161+
162+ Defining the ``$defaultDescription `` static property instead of using the
163+ ``setDescription() `` method allows to get the command description without
164+ instantiating its class. This makes the ``php bin/console list `` command run
165+ much faster.
96166
97- If you want to always run the ``list `` command fast, add the ``--short `` option
98- to it (``php bin/console list --short ``). This will avoid instantiating command
99- classes, but it won't show any description for commands that use the
100- ``setDescription() `` method instead of the static property.
167+ If you want to always run the ``list `` command fast, add the ``--short `` option
168+ to it (``php bin/console list --short ``). This will avoid instantiating command
169+ classes, but it won't show any description for commands that use the
170+ ``setDescription() `` method instead of the static property.
101171
102172The ``configure() `` method is called automatically at the end of the command
103173constructor. If your command defines its own constructor, set the properties
@@ -132,7 +202,7 @@ available in the ``configure()`` method::
132202 }
133203
134204Registering the Command
135- -----------------------
205+ ~~~~~~~~~~~~~~~~~~~~~~~
136206
137207In PHP 8 and newer versions, you can register the command by adding the
138208``AsCommand `` attribute to it::
@@ -143,6 +213,8 @@ In PHP 8 and newer versions, you can register the command by adding the
143213 use Symfony\Component\Console\Attribute\AsCommand;
144214 use Symfony\Component\Console\Command\Command;
145215
216+ // the "name" and "description" arguments of AsCommand replace the
217+ // static $defaultName and $defaultDescription properties
146218 #[AsCommand(
147219 name: 'app:create-user',
148220 description: 'Creates a new user.',
@@ -159,8 +231,8 @@ If you can't use PHP attributes, register the command as a service and
159231:ref: `default services.yaml configuration <service-container-services-load-example >`,
160232this is already done for you, thanks to :ref: `autoconfiguration <services-autoconfigure >`.
161233
162- Executing the Command
163- ---------------------
234+ Running the Command
235+ ~~~~~~~~~~~~~~~~~~~
164236
165237After configuring and registering the command, you can run it in the terminal:
166238
@@ -442,7 +514,7 @@ call ``setAutoExit(false)`` on it to get the command result in ``CommandTester``
442514
443515 $application = new Application();
444516 $application->setAutoExit(false);
445-
517+
446518 $tester = new ApplicationTester($application);
447519
448520.. note ::
0 commit comments