Skip to main content

Inleiding

Laravel Prompts is een PHP-pakket voor het toevoegen van mooie, gebruiksvriendelijke interactieve formulieren aan commandline-applicaties. Het biedt een ervaring die dicht bij browserformulieren ligt, met placeholdertekst en validatie. Omdat je het rechtstreeks in de code van je Artisan-commando’s kunt aanroepen, schrijf je vragen aan de gebruiker eenvoudig en intuïtief.
Laravel Prompts ondersteunt macOS, Linux en Windows (WSL). In niet-ondersteunde omgevingen wordt automatisch overgeschakeld naar fallbackgedrag.

Installatie

Laravel Prompts wordt met Laravel zelf meegeleverd; extra installatie is niet nodig. Wil je het in een ander PHP-project gebruiken, dan installeer je het met Composer.

Basale promptfuncties

text — tekstinvoer

Met text() vraag je de gebruiker om een string in te voeren.
Je kunt een placeholder, standaardwaarde en hint instellen.
Met required maak je de invoer verplicht. Ook het validatiebericht is aanpasbaar.
Met een validate-closure voer je extra validatie uit. De closure geeft een foutmelding terug, of null bij succes.
Je kunt ook Laravel-validatieregels als array opgeven.

textarea — meerregelige tekstinvoer

Met textarea() accepteer je invoer over meerdere regels.

number — numerieke invoer

Met number() accepteer je een getal. Met de pijltjestoetsen omhoog/omlaag kun je de waarde verhogen of verlagen.

password — wachtwoordinvoer

password() werkt zoals tekstinvoer, maar de ingevoerde tekst wordt niet op het scherm getoond.

confirm — ja/nee-bevestiging

Met confirm() vraag je de gebruiker om een keuze uit twee opties. Het geeft true of false terug.
Je kunt de standaardwaarde en de labeltekst aanpassen.

select — keuzelijst

Met select() laat je de gebruiker één optie uit een lijst kiezen.
Gebruik je een associatieve array, dan wordt de sleutel — niet het weergavelabel — de returnwaarde.
Met scroll wijzig je hoeveel opties er zichtbaar zijn voordat er gescrold wordt (standaard 5).

multiselect — meervoudige selectie

Met multiselect() laat je meerdere opties tegelijk kiezen.
Met required maak je het kiezen van minstens één optie verplicht.

suggest — invoer met autocomplete

suggest() toont suggesties maar accepteert ook vrije invoer.
Geef je een closure door, dan kun je de suggesties dynamisch filteren op basis van de invoer.

search — dynamisch zoeken

search() werkt de lijst met suggesties bij bij elke toetsaanslag. De array die de closure teruggeeft vormt de suggesties.

multisearch — dynamisch zoeken met meervoudige selectie

Met multisearch() kun je via dynamisch zoeken meerdere opties selecteren.

pause — pauzeren

Met pause() pauzeer je de verwerking totdat de gebruiker op Enter drukt.

autocomplete — inline aanvullen

autocomplete() is een functie voor inline aanvullen die suggesties als ghost text toont. Anders dan bij suggest() verschijnt bij elke toetsaanslag de best passende suggestie als ghost text, en met de Tab-toets of de pijl naar rechts bevestig je de aanvulling.
Je kunt een placeholder, standaardwaarde en hint instellen.
Geef je een closure door, dan genereer je de suggesties dynamisch op basis van de invoer.

Validatie

Alle promptfuncties ondersteunen validatie via het validate-argument.
Geeft de closure een string terug, dan wordt die als foutmelding getoond en wordt om nieuwe invoer gevraagd. Geeft hij null terug, dan is de validatie geslaagd. Je kunt ook Laravel-validatieregels in arrayvorm gebruiken.
Gebruik het transform-argument om de invoer vóór de validatie te transformeren.

Formulieren

Met form() bundel je meerdere prompts en kun je vóór voltooiing in één keer annuleren.

Informatie-uitvoer

Er zijn functies om tekstberichten met opmaak uit te voeren.

Callouts

callout() toont een label en inhoud omkaderd. Ideaal om belangrijke informatie te laten opvallen, zoals deploysamenvattingen, foutdetails en statusupdates.
Geef je bij het type-argument 'warning' of 'error' op, dan verandert de visuele stijl.
Met het info-argument voeg je een voettekstregel toe. Handig om metadata zoals ID’s en timestamps te tonen.

Rijke inhoud

Geef je in plaats van een string een array door, dan maak je een gestructureerde, rijke callout. De Element-klasse heeft factorymethodes voor koppen, opsommingslijsten, genummerde lijsten, sleutel-waardelijsten en links.
Met Element::keyValueList toon je gelabelde data.
Element::link genereert klikbare hyperlinks in terminals die OSC 8 ondersteunen. Je kunt alleen een URL doorgeven, of een URL met een eigen label.
Laat je het label weg, dan wordt de URL als linktekst getoond.

Tabellen tonen

Met table() toon je data in tabelvorm.

Spin (laadindicator)

spin() toont een laadindicator terwijl de closure wordt uitgevoerd.
Voor spin() is de PHP-extensie pcntl vereist. In omgevingen waar die niet beschikbaar is, wordt de spinner niet getoond.

Voortgangsbalken

Met progress() toon je visueel de voortgang van een herhaalde bewerking.
Je kunt de voortgangsbalk ook handmatig aansturen.

Taken

task() toont tijdens het uitvoeren van de callback een spinner en een scrolbaar live-uitvoergebied. Ideaal om langlopende processen te wrappen, zoals het installeren van dependencies of deployscripts, zodat je in realtime ziet wat er gebeurt.
De callback ontvangt een Logger-instantie waarmee je logregels en statusberichten in realtime kunt tonen.
Voor task() is de PHP-extensie pcntl vereist. In omgevingen waar die niet beschikbaar is, wordt teruggevallen op statische weergave.

Logregels uitvoeren

Met de line-methode schrijf je regel voor regel logs naar het scrollende uitvoergebied.

Statusberichten

Met success, warning en error toon je gemarkeerde berichten die vast bovenaan het scrollende loggebied staan.

Het label bijwerken

Met de label-methode werk je het label van de taak tijdens de uitvoering bij. De subLabel-methode stelt een sublabel in dat gedimd onder het label wordt getoond. Geef je een lege string door, dan wordt het sublabel gewist. Met het subLabel-argument kun je ook een initieel sublabel opgeven.

Tekst streamen

Bij verwerkingen waarbij de uitvoer stapsgewijs ontstaat, zoals door AI gegenereerde responses, kun je met de partial-methode tekst stukje voor stukje streamen. Is de stream klaar, dan roep je commitPartial aan om te bevestigen.

Uitvoerlimiet en de samenvatting behouden

Standaard worden maximaal 10 regels scrollende uitvoer getoond. Dit pas je aan met het limit-argument. Wil je de statusberichten na afloop van de taak op het scherm laten staan, geef dan keepSummary: true door.

Streams

stream() toont tekst stapsgewijs in de terminal. Ideaal voor het tonen van door AI gegenereerde inhoud of data die in chunks binnenkomt.
De append-methode voegt tekst met een fade-in-effect aan de stream toe. Heb je alle inhoud gestreamd, roep dan close aan om de uitvoer te bevestigen en de cursor te herstellen.

Terminalbewerkingen

De terminaltitel instellen

Geef je een lege string door, dan wordt de standaardtitel hersteld.

De terminal wissen

Aandachtspunten voor de terminal

Terminalbreedte: als labels, opties of validatieberichten breder zijn dan het aantal kolommen van de terminal, worden ze automatisch afgekapt. Ga je uit van een terminal van 80 kolommen, houd dan maximaal 74 tekens aan als richtlijn. Terminalhoogte: bij prompts die het scroll-argument accepteren, wordt de waarde automatisch aangepast zodat alles — inclusief ruimte voor validatieberichten — binnen de hoogte van de terminal past.

Fallback

In niet-ondersteunde omgevingen (zoals Windows zonder WSL) wordt automatisch teruggevallen. Standaard worden dan de ingebouwde methodes van Laravel gebruikt, zoals $this->ask() en $this->choice().

Testen

Laravel Prompts werkt samen met Pest- en PHPUnit-tests.
Met de Artisan-testhelpers van Laravel kun je ook assertions schrijven voor de informatiefuncties.

Gerelateerde pagina’s

Artisan-console

Gebruik Prompts binnen Artisan-commando’s
Laatst gewijzigd op 6 september 2026