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.
Connectez-vous pour ajouter un commentaire
Autres messages de ce groupe

This week, development activity mostly focused on dealing with the deprecation of sleep/wakeup methods in PHP 8.5 and their replacement by serialize/unserialize methods. In addition, we published more

It’s been only in July that we published symfony/ai and kicked off our AI initiative, but the repository has been busy since day one. Over 500 stars, more than 200 pull requests & issues, trending

🎤 Take the stage at SymfonyCon Amsterdam 2025, on your own terms!
The Unconference track is back and more dynamic than ever!
This unique, participant-driven format invites attendees to shape

This week, Symfony completed the migration to PHPUnit 12 in the 7.4 branch, which required many changes during the past weeks, such as replacing annotations with attributes. In addition, we updated th

🧑💻HACKDAY IS COMING!
Get ready to code, collaborate, and contribute, Symfony Hackday is back!
Join us in Amsterdam on Saturday, November 29th, for a hands-on hackathon designed to bring the

This week, Symfony released the maintenance versions 6.4.24, 7.2.9, and 7.3.2. Meanwhile, we began deprecating the XML configuration format in some components, enhanced the YAML configuration format t

Symfony 6.4.24 has just been released. Read the Symfony upgrade guide to learn more about upgrading Symfony and use the SymfonyInsight upgrade reports to detect the code you will need to change in you