CLI-Frameworks für PHP: Leistungsstarke Konsolenanwendungen erstellen
Die moderne PHP-Entwicklung beschränkt sich nicht nur auf Webanwendungen. Immer häufiger müssen Entwickler Konsolen- (CLI-) Werkzeuge erstellen: Warteschlangenbearbeiter, Migrationen, Berichtsgeneratoren, Datenparser. Für diese Aufgaben gibt es spezialisierte Frameworks, die die Erstellung von Konsolenbefehlen, die Verarbeitung von Argumenten, die Formatierung der Ausgabe und die Verwaltung von Abhängigkeiten vereinfachen.
Wichtige CLI-Frameworks für PHP
- Symfony Console – die beliebteste Komponente von Symfony, verwendet in Laravel, Drupal, Composer und Hunderten anderer Projekte.
- Laravel Zero – ein Mikro-Framework auf Basis von Laravel, optimiert für CLI-Anwendungen.
- CLIFramework – ein leichtes Framework mit Unterstützung für Zsh/Bash-Autovervollständigung.
- PHP CLI Tools – eine minimalistische Bibliothek für einfache Skripte.
Symfony Console: Der universelle Standard
Die Komponente symfony/console ist der De-facto-Standard für CLI-Anwendungen in PHP. Sie bietet einen vollständigen Satz von Werkzeugen zur Erstellung von Befehlen, einschließlich:
- Automatische Analyse von Befehlszeilenargumenten und -optionen.
- Formatierte Ausgabe mit Unterstützung für Farben, Tabellen und Fortschrittsbalken.
- Interaktive Fragen und Autovervollständigung.
- Ein flexibles Ereignissystem und einen Lebenszyklus für Befehle.
// Beispiel eines einfachen Befehls mit Symfony Console<?php// Datei: src/Command/GreetCommand.phpnamespace App\\Command;
use Symfony\\Component\\Console\\Command\\Command;use Symfony\\Component\\Console\\Input\\InputArgument;use Symfony\\Component\\Console\\Input\\InputInterface;use Symfony\\Component\\Console\\Output\\OutputInterface;
class GreetCommand extends Command{ protected static $defaultName = 'app:greet';
protected function configure(): void { $this ->setDescription('Begrüßt den Benutzer') ->addArgument('name', InputArgument::REQUIRED, 'Name des Benutzers') ->addOption('yell', null, null, 'In Großbuchstaben ausgeben'); }
protected function execute(InputInterface $input, OutputInterface $output): int { $name = $input->getArgument('name'); $message = "Hallo, $name!";
if ($input->getOption('yell')) { $message = strtoupper($message); }
$output->writeln($message); return Command::SUCCESS; }}
// Ausführung: php bin/console app:greet Ivan --yellLaravel Zero: Laravel für die Kommandozeile
Laravel Zero ist ein Mikro-Framework, das den Komfort von Laravel (Eloquent ORM, Artisan, Blade, geplante Aufgaben) in die CLI-Welt überträgt. Es ist ideal für die Erstellung eigenständiger Konsolen-Dienstprogramme, die keine Weboberfläche benötigen.
Wichtige Funktionen von Laravel Zero:
- Vertraute Syntax von Artisan-Befehlen.
- Integrierte Datenbankunterstützung (SQLite, MySQL).
- Aufgabenplaner (Cron-ähnliche Funktionalität).
- Ausgabeformatierung mit Tabellen und Fortschrittsbalken.
- Möglichkeit der Kompilierung in eine einzelne PHAR-Datei.
// Beispiel eines Befehls in Laravel Zero<?php// Datei: app/Commands/ExportUsers.phpnamespace App\\Commands;
use Illuminate\\Console\\Command;use App\\Models\\User;
class ExportUsers extends Command{ protected $signature = 'export:users {--format=csv : Ausgabeformat (csv/json)}'; protected $description = 'Exportiert die Benutzerliste';
public function handle(): int { $users = User::all(['id', 'name', 'email']); $format = $this->option('format');
if ($format === 'json') { $this->line($users->toJson(JSON_PRETTY_PRINT)); } else { $headers = ['