Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

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
src/Command/ListUeberfaelligeAufgabenCommand.php
<?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-tasks

SymfonyStyle: 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/Nutzung
php bin/console app:list-overdue-tasks
echo $?  # zeigt den Exit-Code der letzten Anweisung - 0 bedeutet Erfolg

Tipp: 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.