Skip to main content

Inleiding

laravel/doctor is een officieel pakket dat veelvoorkomende problemen met configuratie, omgeving en infrastructuur in Laravel-applicaties diagnosticeert. Op 28 juli 2026 werd v0.1.0 uitgebracht. Elke diagnostic is één enkele check. Zo controleert er bijvoorbeeld een of “Laravel naar de storage-directory kan schrijven”, en wordt een van meerdere statussen gerapporteerd. Kan iets veilig en deterministisch worden gerepareerd, dan wordt ook een automatische fix aangeboden; voor problemen die niet automatisch te herstellen zijn, zoals een mislukte assetbuild, worden herstelinstructies (remediation) getoond.

Uitvoeren

Na de installatie is het Artisan-commando doctor geregistreerd.
Vindt Doctor een herstelbaar probleem, dan rapporteert hij het probleem en vraagt hij om bevestiging voor de fix.
Wil je fixes zonder bevestiging toepassen, gebruik dan de optie --fix.
De standaardfixes dekken deterministische lokale reparaties, zoals het aanmaken van .env, het genereren van een APP_KEY, het uitschakelen van de debugmodus in productie, het toevoegen van .env aan .gitignore, het aanmaken van storage:link en het herstellen van schrijfrechten op de storage-directories.
De fixfunctionaliteit is alleen beschikbaar in de CLI- en agent-uitvoerformaten. In de JSON- en GitHub-rapportformaten wordt --fix geweigerd, zodat machineleesbare rapporten de applicatie niet wijzigen.
Met --bail stopt de uitvoering bij de eerste diagnostic die faalt of een fout geeft.

Diagnostische statussen

Elke diagnostic retourneert een van de volgende statussen. Standaard eindigt het commando met een foutstatus bij een fail of error. Met --fail-on=warn laat je ook waarschuwingen falen, en met --fail-on=never blijft het bij alleen rapporteren.

Diagnostics selecteren

Je kunt diagnostics selecteren en uitsluiten op klassenaam, groep, pakket of pakket-wildcard.
Publiceer je het configuratiebestand, dan kun je de selectie ook permanent instellen.

Omgevingsmodi

Een sync-queue is bij lokale ontwikkeling een redelijke standaard, maar in productie betekent het dat queue-jobs synchroon binnen het webrequest worden uitgevoerd. Voor dit soort beslissingen lost Doctor je applicatie op naar een van twee modi: local of production. De standaard Laravel-omgevingsnamen local, production en staging worden automatisch herkend. Gebruik je andere namen, dan groepeer je ze in het configuratiebestand per modus.

Standaarddiagnostics

Doctor wordt standaard geleverd met een diagnosesuite die onder meer het volgende omvat.
  • Omgeving — het bestaan van .env, APP_KEY, de PHP-versie, vereiste extensies, tijdzone
  • Composer — installatiestatus van de dependencies, autoload-optimalisatie, automatisch herstel van composer.lock
  • Configuratie — of configuratiebestanden geladen en gecachet kunnen worden, configuratiewaarden die actieve drivers nodig hebben
  • Database — bereikbaarheid van de verbinding, het bestaan van het SQLite-bestand, automatisch toepassen van openstaande migrations
  • Cache, queue, scheduler en sessie — bereikbaarheid van de geconfigureerde drivers, detectie van een sync-queue buiten productie
  • Storage — bereikbaarheid van de standaarddisk, schrijfrechten op de vereiste directories, het bestaan van storage:link
  • Beveiliging — consistentie tussen debugmodus en omgeving, registratie van .env in .gitignore, audit van de Composer-dependencies

Eigen diagnostics maken

Je maakt een eigen diagnosticklasse door simpelweg Laravel\Doctor\Diagnostic te extenden en de methode check() te implementeren. Scaffolden kan met het Artisan-commando make:diagnostic.
Hieronder een voorbeeld van een diagnostic die controleert of APP_KEY is ingesteld en deze automatisch genereert als dat niet zo is.
Is een fix met keuzemogelijkheden zinvol, dan declareer je de opties met fixOptions(). De CLI toont dit als keuzelijst, en de gekozen waarde wordt doorgegeven aan fix().
Aan het einde van de keuzelijst wordt altijd een optie toegevoegd om de fix over te slaan (standaard Skip — leave unfixed). Is een formulering die de huidige keuze behoudt duidelijker, dan kun je een decline-label opgeven.

Diagnostische helpers

Omdat veel applicaties en pakketten steeds dezelfde soorten checks schrijven, biedt Doctor in de namespace Laravel\Doctor\Support helpers voor veelvoorkomende patronen. De Configured-helper leest configuratiewaarden defensief. Omdat diagnostics ook applicaties met kapotte configuratie moeten kunnen inspecteren zonder vóór het rapporteren een exception te gooien, gooien deze methoden — anders dan de getypeerde accessors van de configuratierepository — geen exceptions bij onverwachte types.
De ActiveDrivers-helper lost wrapperdrivers — zoals een standaardlogkanaal dat stack is of een mailer die failover is — op naar de concrete kanalen of mailers die daadwerkelijk worden gebruikt.
De Details-helper formatteert bewijsinformatie die je aan withDetails() hangt. Details::bullets() maakt van een lijst strings een opsomming, Details::failures() verwerkt foutmeldingen met sleutels, en Details::processOutput() kiest de meest bruikbare outputstream van een voltooid proces.
Ook pakketten kunnen met dezelfde API diagnostics registreren vanuit hun serviceprovider.
In het rapport wordt getoond uit welk pakket de diagnostic afkomstig is.

Programmatisch uitvoeren

Je kunt ook Doctor::run() aanroepen zonder het Artisan-commando te gebruiken.
Wil je bij programmatische uitvoering ook fixes toepassen, stel dan fixUsing in. De callback ontvangt de gefaalde diagnostic die een fix aanbiedt; retourneer false om over te slaan, true om de normale fix toe te passen, of de waarde van een fixoptie om die keuze toe te passen. Wordt een fix toegepast, dan voert Doctor de diagnostic opnieuw uit om dit in het rapport te verwerken.

Uitvoerformaten en ondersteuning voor AI-agents

Doctor toont standaard goed leesbare CLI-output, maar je kunt ook kiezen voor JSON of het annotatieformaat van GitHub Actions.
Wordt via de Laravel Agent Detector gedetecteerd dat het commando binnen een AI-codeeragent zoals Claude Code of Cursor draait, dan wordt standaard het agentgeoptimaliseerde formaat gebruikt dat dezelfde conventies volgt als Laravel PAO.
Problemen met fixable: true kun je herstellen door opnieuw uit te voeren met --fix. Wil je dit formaat buiten een agent proberen, voer dan AI_AGENT=test php artisan doctor uit.

Conclusie

Met laravel/doctor breng je problemen in de configuratie, omgeving en infrastructuur van je applicatie snel in kaart door alleen php artisan doctor uit te voeren. Het pakket sluit ook goed aan bij AI-codeeragents: het retourneert output die agents makkelijk interpreteren volgens dezelfde conventies als Laravel PAO, waardoor het de moeite waard is om het op te nemen in CI/CD of in automatische herstelworkflows met AI-agents.

laravel/doctor repository

De broncode en het laatste nieuws vind je hier.
Laatst gewijzigd op 6 september 2026