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-commandomake:rule. De gegenereerde klasse wordt in de map app/Rules geplaatst.
De ValidationRule-interface implementeren
Implementeer devalidate-methode in de gegenereerde klasse. Deze methode roept de $fail-closure aan wanneer de validatie faalt.
$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.rules()-methode van een form request.
Foutmeldingen met vertaalsleutels
In plaats van de foutmelding hard te coderen, kun je ook een vertaalsleutel gebruiken.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.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.
ImplicitRule. Deze interface heeft zelf geen extra methodes en werkt als signaal richting Laravel.
Toegang tot data
DataAwareRule — toegang tot alle formulierdata
Wil je valideren op basis van de waarden van andere velden, dan implementeer je de interfaceDataAwareRule. De setData-methode wordt automatisch aangeroepen voordat de validatie begint.
ValidatorAwareRule — toegang tot de validatorinstantie
Om toegang te krijgen tot alle informatie van de validator (gefaalde regels, custom meldingen, enzovoort) implementeer je de interfaceValidatorAwareRule.
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()
MetValidator::extend() kun je een custom regel als string ('rule_name') beschikbaar maken. Je registreert de regel in de boot()-methode van de AppServiceProvider.
Validator::extend() kun je als string opgeven.
Als statische methode toevoegen aan de Rule-klasse
Door een macro toe te voegen aan deRule-facade kun je een vloeiende API (fluent API) bieden zoals Rule::myRule().
Details van de interne implementatie
Laten we kijken hoeIlluminate\Validation\Validator custom regels aanroept.
Binnen de validator verwerkt validateAttribute() elk veld. Implementeert de regel de interface ValidationRule, dan wordt de methode validateUsingCustomRule() aangeroepen.
ImplicitRule wordt bepaald door de methode isImplicit(), die de regel ook uitvoert wanneer de waarde leeg is.
Gerelateerde pagina’s
Validatie (introductie)
Bekijk de standaardmanieren van valideren in controllers en form requests.