New in Symfony 5.3: Lazy Command Description

Contributed by Nicolas Grekas in #39851.

Symfony introduced lazy commands back in 2017 for its 3.4 version. That change made applications faster and more robust because commands no longer needed to be instantiated to register them in the application. However, Symfony commands aren’t fully lazy. If you run bin/console without arguments (or the equivalent bin/console list command) you see the entire list of commands registered in the application and their descriptions. This requires instantiating all commands, because their description is not lazy. You might think that this is not important, because you rarely list commands and it’s OK if it takes a few milliseconds to run. That’s true, but this makes it harder/impossible to implement another feature that we want to include in future Symfony versions: console autocompletion. That’s why in Symfony 5.3 we’ve introduced a way to define command descriptions (and command aliases) lazily, like the command name. First, you can now add the description attribute to the console.command tag when defining the command in a configuration file: 1 2 3 4 5# config/services.yaml app.command.my_command:

...

tags:
    - { name: console.command, command: app:my-command, description: '...' }

If you prefer to define all this inside the command class, add the new $defaultDescription static property: 1 2 3 4 5 6 7 8 9 10 11 12// src/Command/MyCommand.php namespace App\Command;

use Symfony\Component\Console\Command\Command;

class MyCommand extends Command { protected static $defaultName = 'app:my-command'; protected static $defaultDescription = '...';

// ...

}

You can now define command aliases lazily too (which will also be important for the future console autocompletion). To do so, add the aliases inside the $defaultName property separated with pipe characters (|): 1protected static $defaultName = 'app:my-command|project:my-command|legacy:foo';

If your application uses PHP 8, keep in mind that you have another way of defining this lazy command configuration with the AsCommand attribute: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15// src/Command/MyCommand.php namespace App\Command;

use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command;

[AsCommand(

name: 'app:my-command',
description: '...',
aliases: ['project:my-command', 'legacy:foo']

)] class MyCommand extends Command { // ... }

                Sponsor the Symfony project.

http://feedproxy.google.com/~r/symfony/blog/~3/vgDzCyKssug/new-in-symfony-5-3-lazy-command-description

Creado 4y | 3 jun 2021, 7:20:07


Inicia sesión para agregar comentarios

Otros mensajes en este grupo.

Symfony 7.2.6 released

Symfony 7.2.6 has just been released. Here is the list of the most important changes since 7.2.5:

bug #60288 [VarExporter] dump default value for property hooks if present (@xabbuh)

bug #60267 [C

2 may 2025, 12:40:05 | Symfony
Symfony 7.3.0-BETA1 released

Symfony 7.3.0-BETA1 has just been released. Here is the list of the most important changes since 7.2:

feature #60232 Add PHP config support for routing (@fabpot)

feature #60102 [HttpFoundation] A

2 may 2025, 12:40:04 | Symfony
SymfonyOnline June 2025 : Efficient Web Scraping with Symfony & PHP

SymfonyOnline June 2025 is almost here, starting in almost 2 months on:

June 10-11: Workshop days. It is possible to attend 1 two-day training or 2 one-day trainings. June 12-13: Online confe

2 may 2025, 12:40:03 | Symfony
New in Symfony 7.3: Configurable Compound Rate Limiter

Contributed by Kevin Bond in

2 may 2025, 10:20:09 | Symfony
Symfony 6.4.21 released

Symfony 6.4.21 has just been released. Here is the list of the most important changes since 6.4.20:

bug #60288 [VarExporter] dump default value for property hooks if present (@xabbuh)

bug #60268

2 may 2025, 10:20:08 | Symfony
New in Symfony 7.3: Extra Runtime Dot Env Files

Contributed by Nathan Page in

1 may 2025, 8:40:12 | Symfony
SymfonyOnline June 2025: Where Have the Women of Tech History Gone?

SymfonyOnline June 2025 is almost here, starting in almost 2 months on:

June 10-11: Workshop days. It is possible to attend 1 two-day training or 2 one-day trainings. June 12-13: Online confe

30 abr 2025, 14:20:02 | Symfony