Skip to main content

Einführung

Laravel Prompts ist ein PHP-Paket, mit dem Sie Ihren Kommandozeilen-Anwendungen schöne, benutzerfreundliche interaktive Formulare hinzufügen. Es bietet mit Platzhaltertexten und Validierung ein Erlebnis, das dem eines Browser-Formulars nahekommt. Da Sie die Funktionen direkt im Code eines Artisan-Kommandos aufrufen, formulieren Sie Rückfragen an die Benutzer einfach und intuitiv.
Laravel Prompts unterstützt macOS, Linux und Windows (WSL). In nicht unterstützten Umgebungen greift automatisch ein Fallback.

Installation

Laravel Prompts ist Teil des Laravel-Kerns, eine zusätzliche Installation ist also nicht nötig. In anderen PHP-Projekten installieren Sie es per Composer.

Grundlegende Prompt-Funktionen

text – Texteingabe

Mit text() fordern Sie eine Texteingabe an.
Sie können Platzhalter, Standardwerte und Hinweise setzen.
Mit required machen Sie die Eingabe verpflichtend – die Fehlermeldung ist anpassbar.
Über eine validate-Closure können Sie zusätzlich validieren. Geben Sie eine Fehlermeldung zurück oder null bei Erfolg.
Sie können auch Laravel-Validierungsregeln als Array angeben.

textarea – mehrzeilige Eingabe

Mit textarea() erlauben Sie mehrzeilige Eingaben.

number – Zahleingabe

Mit number() fragen Sie Zahlen ab. Über die Pfeiltasten kann der Wert erhöht bzw. verringert werden.

password – Passwort-Eingabe

password() funktioniert wie eine Texteingabe, das Eingegebene wird jedoch nicht angezeigt.

confirm – Ja/Nein

Mit confirm() erhalten Sie eine binäre Bestätigung. Rückgabewert: true oder false.
Standardwert und Beschriftungen sind anpassbar.

select – Auswahlliste

Mit select() wählt der Benutzer aus einer Liste einen Eintrag.
Mit einem assoziativen Array wird nicht das Label, sondern der Schlüssel zurückgegeben.
Über scroll legen Sie fest, wie viele Optionen vor dem Scrollen angezeigt werden (Standard: 5).

multiselect – Mehrfachauswahl

Mit multiselect() können mehrere Optionen gleichzeitig ausgewählt werden.
Mit required machen Sie mindestens eine Auswahl zur Pflicht.

suggest – Eingabe mit Autocomplete

suggest() bietet Vorschläge, erlaubt aber auch freie Eingaben.
Mit einer Closure filtern Sie die Vorschläge dynamisch nach der Eingabe.

search – dynamische Suche

search() aktualisiert die Vorschläge bei jeder Eingabe. Das von der Closure zurückgegebene Array bildet die Optionen.

multisearch – dynamische Mehrfachauswahl

multisearch() erlaubt Mehrfachauswahl mit dynamischer Suche.

pause – Pause

Mit pause() fordern Sie den Benutzer auf, Enter zu drücken, und halten den Ablauf an.

autocomplete – Inline-Vervollständigung

autocomplete() zeigt Vorschläge als Ghost-Text inline an. Anders als bei suggest() erscheinen passende Vorschläge während der Eingabe als Ghost-Text und können mit Tab oder der Pfeil-rechts-Taste übernommen werden.
Platzhalter, Standardwert und Hinweis sind konfigurierbar.
Auch dynamische Vorschläge per Closure sind möglich.

Validierung

Bei allen Prompt-Funktionen können Sie über das Argument validate eine Validierung hinterlegen.
Gibt die Closure einen String zurück, wird er als Fehler angezeigt und die Eingabe erneut angefordert. Bei null gilt die Validierung als erfolgreich. Auch Laravel-Validierungsregeln lassen sich als Array angeben.
Um Eingaben vor der Validierung zu transformieren, verwenden Sie transform.

Formulare

Mit form() fassen Sie mehrere Prompts zusammen und können den gesamten Ablauf vor dem Abschluss abbrechen.

Informationsausgaben

Für stilisierte Textausgaben gibt es eigene Funktionen.

Callouts

callout() zeigt Label und Inhalt in einem Rahmen an. Ideal, um Deploy-Zusammenfassungen, Fehlerdetails oder Statusaktualisierungen hervorzuheben.
Setzen Sie type auf 'warning' oder 'error', um den visuellen Stil zu ändern.
Über info fügen Sie eine Fußzeile hinzu – praktisch für IDs oder Zeitstempel.

Reichhaltiger Inhalt

Übergeben Sie statt eines Strings ein Array, entsteht ein strukturiertes Callout. Die Klasse Element liefert Factory-Methoden für Überschriften, Aufzählungen, nummerierte Listen, Key-Value-Listen und Links.
Mit Element::keyValueList zeigen Sie beschriftete Datenpaare an.
Element::link erzeugt in Terminals mit OSC-8-Unterstützung klickbare Hyperlinks. Übergeben Sie nur die URL oder URL und Label.
Wird das Label weggelassen, dient die URL selbst als Linktext.

Tabellen anzeigen

Mit table() zeigen Sie Daten in Tabellenform an.

Spinner (Ladeanzeige)

spin() zeigt während der Ausführung einer Closure eine Ladeanzeige an.
Für spin() wird die PHP-Erweiterung pcntl benötigt. In Umgebungen ohne diese Erweiterung erscheint der Spinner nicht.

Fortschrittsbalken

Mit progress() visualisieren Sie den Fortschritt einer Iteration.
Sie können den Balken auch manuell steuern.

Tasks

task() zeigt während der Callback-Ausführung einen Spinner sowie einen scrollbaren Live-Log-Bereich an. Ideal, um langlaufende Vorgänge wie das Installieren von Abhängigkeiten oder Deploy-Skripte einzurahmen und in Echtzeit zu verfolgen.
Der Callback erhält eine Logger-Instanz, mit der Sie Logzeilen und Statusmeldungen in Echtzeit ausgeben.
Für task() wird die PHP-Erweiterung pcntl benötigt. Ohne diese greift eine statische Fallback-Anzeige.

Logzeilen ausgeben

Mit line schreiben Sie einzelne Zeilen in den scrollbaren Log-Bereich.

Statusmeldungen

Mit success, warning und error fixieren Sie hervorgehobene Meldungen oberhalb des Log-Bereichs.

Label aktualisieren

Mit label ändern Sie das Task-Label während der Ausführung. subLabel setzt eine untergeordnete, dezent dargestellte Beschriftung. Ein leerer String entfernt die Sub-Label; über das Argument subLabel legen Sie ein Start-Sub-Label fest.

Text streamen

Für Vorgänge, die – wie KI-Antworten – Text schrittweise erzeugen, streamen Sie mit partial Stück für Stück. Nach Abschluss rufen Sie commitPartial, um zu committen.

Zeilenlimit und Zusammenfassung

Standardmäßig werden bis zu 10 Zeilen scrollbar angezeigt. Über das Argument limit passen Sie das an. Sollen Statusmeldungen nach Abschluss auf dem Bildschirm bleiben, setzen Sie keepSummary: true.

Streams

stream() gibt Text schrittweise im Terminal aus – ideal für KI-generierte Inhalte oder chunkweise eintreffende Daten.
append fügt Text mit einem Fade-in-Effekt in den Stream ein. Nach dem vollständigen Streamen bestätigen Sie mit close, wodurch die Ausgabe committet und der Cursor wiederhergestellt wird.

Terminal-Steuerung

Terminal-Titel setzen

Ein leerer String setzt den Titel auf den Standard zurück.

Terminal leeren

Hinweise zum Terminal

Terminalbreite: Überschreiten Label, Optionen oder Validierungsmeldungen die Spaltenzahl des Terminals, werden sie automatisch gekürzt. Rechnen Sie für ein 80-spaltiges Terminal mit etwa 74 Zeichen. Terminalhöhe: Bei Prompts, die das Argument scroll akzeptieren, wird der Wert automatisch so angepasst, dass Validierungsmeldungen ebenfalls in die Terminalhöhe passen.

Fallback

In nicht unterstützten Umgebungen (z. B. Windows ohne WSL) schaltet Prompts automatisch auf Fallback. Standardmäßig werden dann die integrierten Methoden von Laravel wie $this->ask() oder $this->choice() verwendet.

Tests

Laravel Prompts arbeitet mit Pest und PHPUnit zusammen.
Mit den Artisan-Test-Helfern von Laravel schreiben Sie auch Assertions für Info-Ausgaben.

Verwandte Seiten

Artisan-Konsole

Prompts innerhalb von Artisan-Kommandos einsetzen
Zuletzt geändert am 13. Juli 2026