Commands mit Argumenten und Optionen
Commands mit Argumenten und Optionen
~14 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026
Ein fest verdrahteter Command reicht selten – dieses Kapitel macht unseren überfälligen-Aufgaben-Command KONFIGURIERBAR: ein Projekt-Filter als Argument, ein "nur zählen"-Modus als Option.
Argumente vs. Optionen: der Unterschied
| Typ | Eigenschaften |
|---|---|
| Argument | PFLICHT (sofern kein Default gesetzt), POSITIONSABHÄNGIG – app:command wert. |
| Option | IMMER optional, NAMENTLICH referenziert, unabhängig von der Reihenfolge – app:command --option=wert oder --option als reiner An/Aus-Schalter. |
Ein Argument hinzufügen: Projekt-Filter
use Symfony\Component\Console\Attribute\Argument;
use App\Repository\ProjectRepository;
// ... Klassen-Attribut und Constructor wie in Kapitel 39, ProjectRepository zusätzlich injiziert ...
protected function execute(
InputInterface $input,
OutputInterface $output,
#[Argument(description: 'Optionale Projekt-ID zum Filtern')]
?int $projektId = null,
): int {
$io = new SymfonyStyle($input, $output);
if ($projektId !== null) {
$projekt = $this->projectRepository->find($projektId);
if ($projekt === null) {
$io->error(sprintf('Projekt mit ID %d nicht gefunden.', $projektId));
return Command::FAILURE;
}
}
// ... restliche Logik wie in Kapitel 39 ...
}Die MODERNE Syntax (Symfony 7.1+): #[Argument] DIREKT auf dem Methoden-Parameter, mit Standard-PHP-Typisierung (?int für optional). Symfony übernimmt Parsing und Typ-Konvertierung AUTOMATISCH – kein manuelles $input->getArgument('project-id') plus (int)-Cast mehr nötig, wie es die ältere Syntax verlangte.
Eine Option hinzufügen: nur zählen
use Symfony\Component\Console\Attribute\Option;
protected function execute(
InputInterface $input,
OutputInterface $output,
#[Argument(description: 'Optionale Projekt-ID zum Filtern')]
?int $projektId = null,
#[Option(description: 'Nur die Anzahl ausgeben, keine Details')]
bool $nurZaehlen = false,
): int {
// ...
if ($nurZaehlen) {
$io->writeln((string) count($aufgaben));
return Command::SUCCESS;
}
// ... normale Ausgabe wie zuvor ...
}Der Command mit Argumenten/Optionen aufrufen
php bin/console app:list-overdue-tasks # alle Projekte
php bin/console app:list-overdue-tasks 3 # nur Projekt-ID 3
php bin/console app:list-overdue-tasks --nur-zaehlen
php bin/console app:list-overdue-tasks 3 --nur-zaehlenInteraktive Nachfragen bei fehlenden Pflichtangaben
if ($io->confirm('Wirklich alle überfälligen Aufgaben als erledigt markieren?', false)) {
// ... Aufgaben aktualisieren ...
}
$antwort = $io->ask('Neuer Status für alle gefundenen Aufgaben', 'in_arbeit');confirm() fragt eine Ja/Nein-Bestätigung ab (mit Default-Wert als zweitem Argument), ask() fragt freien Text ab – beide pausieren die Ausführung, bis der Nutzer im Terminal antwortet. NÜTZLICH für interaktive Nutzung, aber problematisch für AUTOMATISIERTE Skripte.
Achtung: Interaktive Abfragen BLOCKIEREN in automatisierten Kontexten (Cron-Jobs, CI/CD, Kapitel 41) unbegrenzt, da NIEMAND antworten kann – Symfony bietet dafür das --no-interaction-Flag (auch -n), das ALLE interaktiven Abfragen automatisch mit ihrem Default-Wert beantwortet. Commands, die auch automatisiert laufen sollen, MÜSSEN mit --no-interaction funktionieren.
Hilfe zu einem Command anzeigen
php bin/console app:list-overdue-tasks --helpTipp: --help zeigt AUTOMATISCH generierte Dokumentation zu ALLEN Argumenten und Optionen, inklusive der description-Texte aus den Attributen – ein weiterer Grund, DIESE stets sinnvoll zu formulieren, statt sie leer zu lassen.