Skip to main content

Overzicht

Wanneer je een Laravel-project aanmaakt, is de afhandeling van fouten en exceptions al voor je geconfigureerd. Aanpassen doe je met de withExceptions-methode in bootstrap/app.php.

De exception-afhandelingsflow

Zo verloopt de stroom van het optreden van een exception tot de response die naar de client wordt teruggestuurd.
Het $exceptions-object dat aan de withExceptions-closure wordt doorgegeven, is een instantie van Illuminate\Foundation\Configuration\Exceptions en beheert de exception-afhandeling van je hele applicatie.

Debugconfiguratie

De debug-optie in config/app.php bepaalt hoeveel foutinformatie wordt getoond. Standaard wordt de waarde van de omgevingsvariabele APP_DEBUG uit .env gebruikt.
Zet APP_DEBUG in productie altijd op false. Als je hem op true laat staan, loop je het risico dat vertrouwelijke informatie aan eindgebruikers wordt blootgesteld.

Exceptions rapporteren

Het rapporteren van exceptions houdt in dat je exceptions logt of doorstuurt naar externe services zoals Laravel Nightwatch, Sentry of Flare. Standaard worden ze gelogd op basis van de configuratie in config/logging.php.

Eigen rapportagecallbacks

Wil je per soort exception een andere rapportagelogica, geef dan een closure door aan de report-methode. Laravel bepaalt het soort exception op basis van de type-hint van de closure.
Ook na het registreren van een eigen callback blijft de standaardlogging actief. Wil je de doorgifte naar de standaardafhandeling stoppen, roep dan stop() aan of geef false terug.

De report()-helper

Wil je alleen een exception rapporteren zonder een foutpagina te tonen, gebruik dan de report()-helper.
Met de report()-helper kun je een fout loggen zonder de response naar de gebruiker te onderbreken. Handig voor exception-afhandeling in achtergrondjobs en niet-kritieke processen.

Dubbele rapportages voorkomen

Als dezelfde exception-instantie meerdere keren aan report() wordt doorgegeven, kunnen er dubbele logregels ontstaan. Met dontReportDuplicates() wordt dezelfde instantie alleen de eerste keer gelogd.

Globale logcontext

Wil je aan alle exceptionlogs gemeenschappelijke informatie toevoegen, gebruik dan de context-methode. Indien beschikbaar wordt het ID van de huidige gebruiker automatisch toegevoegd.

Een context()-methode toevoegen aan een exceptionklasse

Als je op de exceptionklasse zelf een context()-methode definieert, kun je contextinformatie specifiek voor die exception in de logs opnemen.

Het logniveau wijzigen

Wil je een specifieke exception op een specifiek logniveau loggen, gebruik dan de level-methode.

Exception-rapportages throttlen

Als er grote aantallen exceptions optreden, kun je met de throttle-methode het aantal rapportages beperken.
Wil je begrenzen op het aantal per minuut, gebruik dan Limit.

Exceptions renderen

Renderen is het omzetten van een exception naar een HTTP-response. Standaard genereert Laravel automatisch een passende response, maar je kunt dit aanpassen.

Eigen rendercallbacks

Geef een closure door aan de render-methode om een exception naar een response om te zetten.
Je kunt ook het renderen van ingebouwde exceptions (zoals NotFoundHttpException) overschrijven. Als de closure geen waarde teruggeeft, wordt de standaardrendering gebruikt.

Automatische JSON/HTML-detectie

Laravel bepaalt automatisch of het HTML of JSON teruggeeft op basis van de Accept-header van het request. Wil je deze beslislogica aanpassen, gebruik dan shouldRenderJsonWhen.

De volledige response aanpassen

Met de respond-methode kun je de gegenereerde response verder bewerken.

Eigen exceptionklassen

Je kunt eigen exceptionklassen maken in de map app/Exceptions/. Als je de methoden report() en render() definieert, worden ze automatisch aangeroepen zonder dat je configuratie in bootstrap/app.php hoeft te schrijven.

Een exceptionklasse maken

1

Maak de exceptionklasse aan

2

Implementeer report() en render()

In de report()-methode kun je dependency injection via type-hints gebruiken. De servicecontainer van Laravel lost ze automatisch op.

De ShouldntReport-interface

Voor exceptions die geen rapportage nodig hebben, implementeer je de ShouldntReport-interface. Exceptions die deze interface implementeren, worden nooit gerapporteerd.

Exceptions gooien

De abort()-helper

Vanaf elke plek in je applicatie kun je een HTTP-foutresponse laten optreden.

abort_if() / abort_unless()

Helpers om voorwaardelijk een exception te gooien.
Handig bij permissiecontroles in controllers en middleware. Wordt ook vaak gebruikt in combinatie met gates en policies.

Exceptions globaal beheren

Specifieke exceptions negeren

Met dontReport geef je exceptions op die niet gerapporteerd worden. Eigen renderlogica blijft wel gewoon werken.
Wil je voorwaardelijk negeren, geef dan een closure door aan dontReportWhen.
Laravel negeert standaard automatisch een aantal exceptions, zoals 404-fouten, ongeldige CSRF-tokens (419) en niet-overeenkomende origins (403).

Door Laravel genegeerde exceptions weer inschakelen

Om exceptions die standaard worden genegeerd weer te laten rapporteren, gebruik je stopIgnoring.

HTTP-foutpagina’s

In Laravel kun je per HTTP-statuscode eigen foutviews definiëren.

Eigen foutviews maken

Maak in de map resources/views/errors/ Blade-templates aan met de statuscode als bestandsnaam.
Binnen de view heb je via de variabele $exception toegang tot de foutinformatie.

De standaardfouttemplates publiceren

Wil je de standaardfoutpagina’s van Laravel als startpunt voor aanpassing gebruiken, haal ze dan op met vendor:publish.

Fallback-foutpagina’s

Als fallback voor statuscodes zonder bijbehorende view kun je 4xx.blade.php en 5xx.blade.php aanmaken.
Voor 404, 500 en 503 heeft Laravel standaardfoutpagina’s. Om deze aan te passen, maak je aparte bestanden (zoals 404.blade.php) in plaats van fallbacks.

Praktijkvoorbeeld: een API-exceptionhandler

In applicaties die een API aanbieden, moeten exceptions altijd als JSON worden teruggegeven. Hieronder een implementatievoorbeeld waarbij API-fouten centraal worden beheerd in bootstrap/app.php.

Een eigen API-exceptionklasse implementeren

Met een basisexceptionklasse speciaal voor je API kun je op elk endpoint een uniforme foutresponse teruggeven.
Een gebruiksvoorbeeld in een controller:

Samenvatting

  • Bestanden zoals resources/views/errors/404.blade.php worden automatisch gebruikt zodra je ze aanmaakt
  • Via de variabele $exception heb je toegang tot de foutdetails
  • Met php artisan vendor:publish --tag=laravel-errors haal je de standaardtemplates op
  • Met 4xx.blade.php / 5xx.blade.php definieer je fallback-pagina’s
  • Zet altijd APP_DEBUG=false en toon stacktraces niet aan gebruikers
  • Koppel externe fouttrackingservices zoals Sentry of Flare om fouten centraal te beheren
  • Gebruik throttle() om logoverstroming te voorkomen bij grote aantallen exceptions
  • Handhaaf een consistent JSON-foutresponseformaat op API-endpoints
Laatst gewijzigd op 6 september 2026