Skip to main content

Wat zijn custom validatieregels?

Laravel biedt een rijke set ingebouwde validatieregels, maar soms heb je applicatiespecifieke validatielogica nodig. Met custom validatieregels definieer je herbruikbare validatielogica als klasse of closure, die je op dezelfde manier gebruikt als de standaardregels. Er zijn twee manieren om custom regels te definiëren:
  • Rule-objecten — goed herbruikbaar en makkelijk te testen
  • Closures — geschikt voor simpele regels die je maar één keer gebruikt

Rule-objecten

Een ruleklasse genereren

Genereer een nieuwe ruleklasse met het Artisan-commando make:rule. De gegenereerde klasse wordt in de map app/Rules geplaatst.

De ValidationRule-interface implementeren

Implementeer de validate-methode in de gegenereerde klasse. Deze methode roept de $fail-closure aan wanneer de validatie faalt.
In de string die je aan de $fail-closure doorgeeft, kun je de placeholder :attribute gebruiken. Laravel vervangt die door de veldnaam.

Een rule-object toepassen

Geef een instantie van het rule-object door in de validatie-array.
Dit werkt op dezelfde manier in de rules()-methode van een form request.

Foutmeldingen met vertaalsleutels

In plaats van de foutmelding hard te coderen, kun je ook een vertaalsleutel gebruiken.
Voeg de melding toe aan het vertaalbestand lang/nl/validation.php.

Meerdere foutmeldingen toevoegen

Om meerdere fouten voor één veld te rapporteren, roep je $fail meerdere keren aan.

Regels op basis van closures

Simpele regels die je maar op één plek in je applicatie gebruikt, kun je zonder klasse definiëren met een closure.
Closureregels zijn handig omdat je ze inline definieert, maar hergebruik en losstaand testen zijn lastig. Logica die je op meerdere plekken gebruikt, kun je daarom beter in een rule-object onderbrengen.

Impliciete regels (ook uitvoeren bij lege waarden)

Standaard wordt een custom regel niet uitgevoerd wanneer het veld leeg is of ontbreekt. Wil je de regel ook bij lege waarden laten draaien, genereer de klasse dan met de optie --implicit.
De gegenereerde klasse implementeert de interface ImplicitRule. Deze interface heeft zelf geen extra methodes en werkt als signaal richting Laravel.
ImplicitRule geeft alleen aan Laravel door dat “het attribuut verplicht is”. Of de validatie bij een lege waarde daadwerkelijk faalt, hangt af van de implementatie van je validate-methode.

Toegang tot data

DataAwareRule — toegang tot alle formulierdata

Wil je valideren op basis van de waarden van andere velden, dan implementeer je de interface DataAwareRule. De setData-methode wordt automatisch aangeroepen voordat de validatie begint.
Voorbeeldgebruik:

ValidatorAwareRule — toegang tot de validatorinstantie

Om toegang te krijgen tot alle informatie van de validator (gefaalde regels, custom meldingen, enzovoort) implementeer je de interface ValidatorAwareRule.

Praktische use cases

Controleren op Japanse tekens

Een regel die het tekentype valideert.

Telefoonnummerformaat valideren

Een regel die het Japanse telefoonnummerformaat valideert.

Uniciteit binnen een tenant

Een uniciteitsbeperking binnen de scope van een tenant, gebruikelijk in multitenant-applicaties.
1

De ruleklasse aanmaken

2

Gebruiken in een form request

3

Bij updates het ID uitsluiten

Werk je een bestaand record bij, dan sluit je het eigen ID uit bij de duplicaatcontrole.

Regels registreren in een service provider

Een regel toevoegen met Validator::extend()

Met Validator::extend() kun je een custom regel als string ('rule_name') beschikbaar maken. Je registreert de regel in de boot()-methode van de AppServiceProvider.
Regels die je registreert met Validator::extend() kun je als string opgeven.
Validator::extend() is een oudere registratiemethode dan rule-objecten. Voor nieuwe ontwikkeling raden we rule-objecten aan die de interface ValidationRule implementeren.

Als statische methode toevoegen aan de Rule-klasse

Door een macro toe te voegen aan de Rule-facade kun je een vloeiende API (fluent API) bieden zoals Rule::myRule().

Details van de interne implementatie

Laten we kijken hoe Illuminate\Validation\Validator custom regels aanroept. Binnen de validator verwerkt validateAttribute() elk veld. Implementeert de regel de interface ValidationRule, dan wordt de methode validateUsingCustomRule() aangeroepen.
De afhandeling van ImplicitRule wordt bepaald door de methode isImplicit(), die de regel ook uitvoert wanneer de waarde leeg is.
Je kunt DataAwareRule en ValidatorAwareRule ook tegelijk implementeren. In een klasse met beide interfaces vinden beide injecties plaats.

Gerelateerde pagina’s

Validatie (introductie)

Bekijk de standaardmanieren van valideren in controllers en form requests.
Laatst gewijzigd op 6 september 2026