Wat is validatie
Validatie is het controleren of de gegevens die een gebruiker verstuurt voldoen aan het verwachte formaat en de gestelde voorwaarden. Laravel biedt een eenvoudige maar krachtige validatiefunctionaliteit via devalidate methode van het request-object of via speciale form request-klassen.
Validatie in de controller
$request->validate() gebruiken
De eenvoudigste manier om te valideren is door $request->validate() aan te roepen in een controllermethode.
Als de validatie mislukt, stuurt Laravel de gebruiker automatisch terug naar het vorige scherm en slaat het de foutinformatie op in de sessie.
Definieer de routes.
validate methode geef je een array door met veldnamen als sleutels en regels als waarden.
Regels kun je scheiden met een pipe | of opgeven als array.
Belangrijke validatieregels
Uitgebreide validatie van e-mailadressen
Aan deemail regel kun je parameters toevoegen die de validatiemethode bepalen.
rfc valideert dat het formaat voldoet aan de RFC, en dns valideert dat het domein van het e-mailadres een geldig MX-record heeft. dns voert daadwerkelijk een DNS lookup uit, maar bepaalt niet of de individuele mailbox bestaat.
Je kunt dezelfde validatie ook schrijven met de fluent Rule builder.
dns validator voert daadwerkelijk een DNS lookup uit en controleert of het domein van het e-mailadres een geldig MX-record heeft. Hij bepaalt echter niet of de individuele mailbox bestaat.
Om in tests niet afhankelijk te zijn van live DNS lookups, kun je de dns lookup faken met Validator::fakeDnsLookups. Andere opgegeven validaties, zoals rfc, worden gewoon uitgevoerd.
Arraysleutels valideren
Dearray_keys regel valideert dat de waarde een PHP-array is en dat alle sleutels voorkomen in de opgegeven lijst. Geef minimaal één sleutel op.
Rule::arrayKeys methode.
Alle beschikbare validatieregels vind je in de officiële documentatie.
Gevalideerde data gebruiken
De returnwaarde van devalidate methode is een array die alleen de data bevat die de validatie heeft doorstaan.
Je kunt deze veilig gebruiken als betrouwbare data.
Fouten weergeven in Blade-templates
Als de validatie mislukt, maakt Laravel de variabele$errors automatisch beschikbaar in alle views.
De ShareErrorsFromSession middleware, die deel uitmaakt van de web middlewaregroep, zorgt hiervoor.
Alle fouten in een lijst weergeven
Fouten per veld weergeven
Met de@error directive kun je fouten voor een specifiek veld inline weergeven.
Form requests
Wat is een form request
Wordt je validatielogica complexer, dan is het effectief om deze onder te brengen in een “form request”-klasse. Een form request is een aangepaste request-klasse die validatie- en autorisatielogica bundelt in één klasse.Een form request maken
Genereer een form request-klasse met hetmake:request Artisan-commando.
app/Http/Requests/StorePostRequest.php wordt gegenereerd.
De rules() methode
Geeft de validatieregels terug als array. Dit is hetzelfde formaat als de array die je doorgeeft aan de validate methode in de controller.
De authorize() methode
Bepaalt of de gebruiker gemachtigd is om dit request uit te voeren.
Geef je true terug, dan is de autorisatie in orde; geef je false terug, dan wordt automatisch een 403-response teruggegeven.
Wil je alleen geauthenticeerde gebruikers toestaan, dan kun je dat controleren met auth()->check().
In een tutorial volstaat het om true terug te geven.
Injecteren in de controller
Een form request gebruik je door hem simpelweg als type hint op te geven in de controllermethode. De validatie wordt uitgevoerd voordat de controller wordt aangeroepen, dus je hoeft geen validatiecode in de methode te schrijven.$request->validated() haal je alleen de gevalideerde data op.
Complexiteit en lengte van wachtwoorden instellen
Met hetPassword rule-object kun je de complexiteit en de minimale en maximale lengte van wachtwoorden in één keer opgeven.
min() bepaalt het minimale aantal tekens, max() het maximale. Door max() op te geven kun je complexe wachtwoorden toestaan en tegelijk expliciet een bovengrens stellen voor opslag of integratie met externe diensten.
Praktijkvoorbeeld: een postformulier maken en opslaan
Dit is de complete flow van het weergeven van het formulier tot het versturen, valideren en opslaan.1
Routes definiëren
2
Een form request maken
3
De controller implementeren
4
Een Blade-template maken
Neem in Blade-formulieren altijd de
@csrf directive op. Zonder CSRF-token geeft Laravel een 419-fout terug.Volgende stap
HTTP-requests
Blik terug op hoe je data ophaalt met het request-object.