Eigene Console Commands erstellen
Eigene Console Commands erstellen
~14 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026
Wir haben bin/console seit Kapitel 3 für Symfonys EIGENE Befehle genutzt – jetzt bauen wir unseren ERSTEN eigenen Command: überfällige Aufgaben aus Kapitel 24 auflisten.
Einen Command generieren
php bin/console make:command app:list-overdue-tasks<?php
declare(strict_types=1);
namespace App\Command;
use App\Repository\TaskRepository;
use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
#[AsCommand(
name: 'app:list-overdue-tasks',
description: 'Listet alle überfälligen Aufgaben auf',
)]
class ListUeberfaelligeAufgabenCommand extends Command
{
public function __construct(
private readonly TaskRepository $taskRepository,
) {
parent::__construct();
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$io = new SymfonyStyle($input, $output);
$aufgaben = $this->taskRepository->findUeberfaelligeAufgaben();
if (count($aufgaben) === 0) {
$io->success('Keine überfälligen Aufgaben!');
return Command::SUCCESS;
}
$io->warning(sprintf('%d überfällige Aufgabe(n) gefunden:', count($aufgaben)));
foreach ($aufgaben as $aufgabe) {
$io->writeln(sprintf(
'- %s (fällig: %s)',
$aufgabe->getTitel(),
$aufgabe->getFaelligAm()?->format('d.m.Y') ?? 'unbekannt',
));
}
return Command::SUCCESS;
}
}GENAU wie bei Controllern (Kapitel 8): der __construct()-Parameter TaskRepository wird per Autowiring automatisch aufgelöst – Console Commands sind, wie ALLES in dieser Schulung, GEWÖHNLICHE Services (Kapitel 32-34).
Den Command ausführen
php bin/console app:list-overdue-tasksSymfonyStyle: konsistente, formatierte Terminal-Ausgaben
$io->success(...)– grün hervorgehobene Erfolgsmeldung.$io->warning(...)– gelb hervorgehobene Warnung.$io->error(...)– rot hervorgehobene Fehlermeldung.$io->table(...)– formatierte Tabelle (nützlich für strukturierte Übersichten).$io->progressBar(...)– Fortschrittsbalken bei länger laufenden Operationen.
SymfonyStyle ist die EMPFOHLENE Art, mit dem Terminal zu kommunizieren – gegenüber rohem $output->writeln(...) sorgt sie für ein konsistentes, professionelles Erscheinungsbild ÜBER alle Commands eines Projekts hinweg.
Exit-Codes: Command::SUCCESS und Command::FAILURE
Der Rückgabewert von execute() wird zum tatsächlichen Prozess-Exit-Code – ENTSCHEIDEND für Automatisierung (Shell-Skripte, CI/CD, Kapitel 41 Cron-Jobs prüfen üblicherweise diesen Wert):
return Command::SUCCESS; // Exit-Code 0 - alles gut
return Command::FAILURE; // Exit-Code 1 - etwas ist fehlgeschlagen
return Command::INVALID; // Exit-Code 2 - falsche Eingabe/Nutzungphp bin/console app:list-overdue-tasks
echo $? # zeigt den Exit-Code der letzten Anweisung - 0 bedeutet ErfolgTipp: In einem Shell-Skript oder CI/CD-Kontext ("führe diesen Command aus, und breche bei Fehler den gesamten Deployment-Prozess ab") ist der Exit-Code das EINZIGE, worauf sich Automatisierung verlässt – ein Command, der IMMER Command::SUCCESS zurückgibt, selbst bei einem internen Fehler, würde Probleme UNSICHTBAR machen.