Datenvalidierung in Laravel: Bequem und leistungsstark
Veröffentlicht: 2023-05-03Heute ist es wichtiger denn je, dass die Daten in Ihren Anwendungen gültig und genau sind und alle Systemanforderungen erfüllen. Es befasst sich mit der Notwendigkeit, die Datenkonsistenz zu wahren und Sicherheitslücken zu vermeiden.
Laravel macht die Datenvalidierung einfach und intuitiv. Es folgt einer MVC-Architektur (Model View Controller) und erfordert nur allgemeine Kenntnisse von PHP und Konzepten der objektorientierten Programmierung (OOP). Darüber hinaus bietet Laravel mehrere Methoden zur Validierung eingehender Daten.
Lernen Sie einige dieser Ansätze kennen und erfahren Sie, wie Sie Validierungsregeln auf Ihren Datensatz anwenden.
Datenvalidierung leicht gemacht in Laravel
Laravel stellt mehrere gebrauchsfertige Validierungsregeln bereit, wenn die Benutzer Ihrer Anwendung Daten über Formulare übermitteln. Sie können Eingabefelder als erforderlich markieren, eine minimale oder maximale Länge festlegen und eindeutige (nicht doppelte) Einträge und gültige E-Mail-Adressen verlangen. Der Laravel-Validator prüft, ob die Eingabe diese oder andere von Ihnen festgelegte Regeln erfüllt.
Diese Laravel-Validierungsregeln umfassen:
-
required
— Die Felddaten dürfen nicht null oder leer sein. -
array
— Die Felddaten müssen ein PHP-Array sein. -
bail
– Die Validierungsregel stoppt die Ausführung, nachdem ihr erster Validierungsfehler auftritt. -
email
— Die Felddaten müssen eine gültige E-Mail-Adresse sein. -
unique
— Die Felddaten dürfen keine Duplikate in der Datenbanktabelle haben.
Alle Validierungsmethoden haben Vor- und Nachteile, aber ihre Vielfalt ermöglicht es Ihnen, den besten Ansatz für Ihre Bedürfnisse zu wählen. Je nach gewählter Methode kann die Laravel-Validierung auf verschiedene Arten erfolgen, mit manuellen oder automatischen Fehlermeldungen.
Die gebräuchlichste Methode ist code>validate, die für eingehende HTTP-Anforderungen verwendet wird. Diese Methode ist mit den Anforderungsdaten verkettet und führt die Validierungsregeln aus. Sie können die Regeln für jedes Feld durch Kommas trennen, wie im Beispiel unten zu sehen ist.
use Illuminate\Http\Request; public function store (Request $request){ $validated = $request->validate([ 'email' => ['required, unique:users, email, bail'], 'name' => ['required'], ]); }
Hier ist email
eine erforderliche Eingabe, was bedeutet, dass sie nicht null sein kann. Außerdem muss sie in der users
eindeutig sein, um sicherzustellen, dass dieselbe E-Mail-Adresse nicht zweimal registriert wird. Die letzte Regel besagt, dass auch die E-Mail-Adresse gültig sein muss. Andernfalls endet der Validierungsprozess. Das Namensfeld ist erforderlich, hat aber keine anderen Regeln.
Wenn eine Laravel-Validierungsregel fehlschlägt, wird automatisch eine Antwort generiert.
Validierungsgrundlagen
Betrachten Sie zum besseren Verständnis der Validierungsmethoden das folgende Beispiel. Sie definieren eine Route für den Endpunkt und erstellen einen Controller, um die Anforderungsdaten zu validieren und zu verarbeiten.
Erstellen Sie zunächst einen einfachen Endpunkt, der es Benutzern ermöglicht, ihre E-Mails und Passwörter zu speichern.
Definieren Sie die Route
Laravel-Routen werden in der Datei „routes/web.php“ für eine Webanwendung oder „routes/api.php“ für eine API definiert. Verwenden Sie für dieses Beispiel api.php :
use App\Http\Controllers\UserController; Route::post('/store', [UserController::class]);
Erstellen Sie den Controller
Führen Sie diesen Artisan-Befehl aus, um den Controller zu erstellen:
php artisan make:controller UserController
Dieser Befehl erstellt eine UserController.php- Datei im Verzeichnis app/Http/Controllers .
Definieren Sie nun eine store
, um Daten zu validieren, die in den Speicherendpunkt eingehen, bevor Sie sie speichern.
In diesem Beispiel werden die folgenden Felder anhand dieser Regeln validiert:
- email – Sollte eindeutig sein, eine gültige E-Mail-Adresse und muss erforderlich sein
- password — Sollte eine Mindestlänge, Passwortbestätigung haben und muss erforderlich sein
- Alter — Muss eine Zahl und erforderlich sein
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { /** * Store new user details. * */ public function store(Request $request){ $validated = $request->validate([ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); // After user data is validated, logic to store the data } }
Die confirmed
Regel ermöglicht es Ihnen, ein bestimmtes Feld zweimal anzufordern, um zu überprüfen, ob die Daten korrekt sind, z. B. wenn Benutzer ihre Passwörter während der Registrierung erneut eingeben. Diese Regel erfordert ein Feld namens password_confirmation
, dessen Daten mit dem Passwortfeld übereinstimmen müssen.
Fehlermeldungen anzeigen
Wenn die Validierungskriterien erfüllt sind, wird Ihr Code normal weiter ausgeführt. Wenn die Validierung fehlschlägt, wird eine IlluminateValidationValidationException
Ausnahme ausgelöst und die entsprechende Fehlerantwort zurückgegeben.
Das Beispiel basiert auf einer API, die eine HTTP-Antwort 422 Unprocessable Entity
im JSON-Format zurückgibt. Bei Webanwendungen würde es auf die vorherige URL umleiten, um die Fehlermeldung anzuzeigen, und die Anforderungsdaten wurden in die Sitzung geflasht.
Sie können die Variable $errors
in Ihren Ansichten verwenden, um zurückgegebene Fehler anzuzeigen:
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
Sie können auch auswählen, nur den ersten Fehler anzuzeigen oder durchzugehen, um alle anzuzeigen.
// Fetch all errors $errors->all() // Fetch only the first error $errors->first()
Formulare neu ausfüllen
Das erneute Ausfüllen von Formularen erspart Benutzern das erneute Eingeben von Informationen, sodass sie sich auf die Behebung des Fehlers konzentrieren können. Im Beispiel einer fehlgeschlagenen E-Mail-Adresse können Sie den Rest des Formulars neu ausfüllen, indem Sie den alten Wert für das name
aufrufen.
$name = $request-> old('name') //Blade helper <input type="text" name="name" value="{{ old('name') }}">
Diese Regel würde null
zurückgeben, wenn es keine vorherige Eingabe gab.
Erweiterte Validierung
Laravel bietet eine weitere Methode zum Schreiben von Validierungen, die als Formularanforderungen bezeichnet werden. Eine Formularanforderung ist eine benutzerdefinierte Anforderungsklasse, die Validierungen organisiert und Ihren Controller entrümpelt.
Sie verfügen über eine eigene Validierungs- und Autorisierungslogik, die für große Eingabemengen geeignet ist, und können verwendet werden, um Validierungsregeln zu definieren und Fehlermeldungen anzupassen.
Um eine Formularanforderung zu erstellen, führen Sie diesen Artisan-Befehl aus:
php artisan make:request StoreUserRequest
Dieser Befehl erstellt eine StoreUserRequest.php- Datei im Verzeichnis app/Http/Requests und enthält zwei Standardmethoden:
-
rules
gibt Validierungsregeln für Anforderungsdaten zurück. -
authorize
gibt einen booleschen Wert zurück, um anzugeben, ob dieser Benutzer berechtigt ist, die angeforderte Aktion auszuführen.
Konvertieren Sie das vorherige Beispiel, um eine Formularanforderung zu verwenden.
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class StoreUserRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { // Add logic to check if the user is authorized to submit this data. return true; } /** * Get the validation rules that apply to the request. * * @return array<string, mixed> */ public function rules() { return [ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]; } }
Um die Fehlermeldungen dieser Regeln anzupassen, können Sie die Methode messages in der Klasse FormRequest
überschreiben.
/** * Get the error messages for the defined validation rules. * * @return array */ public function messages() { return [ 'email.required' => 'An email address is required', 'email.email' => 'The email address must be valid', 'password.confirmed'=>'Re-type your password as password_confirmation, passwords does not match' ]; }
Hinweis: Der Datenname und die Validierungsregel werden durch einen Punkt (.) vor den Nachrichtendaten getrennt.
Benutzerdefinierte Validierung
Um eine benutzerdefinierte Validierung zu erstellen, können Sie anstelle von validate
eine Validator
Fassade verwenden. Die Validator-Instanz enthält zwei Argumente: die zu validierenden Daten und ein Array von Validierungsregeln. Diese beiden Argumente werden an die Methode ::make
auf der Validator-Fassade übergeben, wodurch eine neue Validator-Instanz generiert wird.
use Illuminate\Http\Request; public function store (Request $request){ $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ]); if ($validator->fails()) { // Return errors or redirect back with errors return $validator->errors(); } // Retrieve the validated input... $validated = $validator->validated(); // Continue logic to store the data }
Wenn Sie eine automatische Direktverbindung hinzufügen möchten, können Sie die validate
Methode auf einer bereits vorhandenen Validator-Instanz ausführen. Wenn die Validierung fehlschlägt, erzeugt eine XHR-Anforderung eine JSON-Antwort mit 422 Unprocessable Entity
als Statuscode, oder der Benutzer wird sofort umgeleitet.
$validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'password' => 'required|min:7|confirmed' ])->validate();
Sie können Ihre Fehlermeldungen auch anpassen, indem Sie ein drittes Argument namens messages
an Validate::make method
übergeben:
$validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'age' => 'required|numeric', 'password' => 'required|min:7|confirmed' ], $messages = [ 'required' => 'The :attribute field is required.', ]);
Hinweis: Das :attribute
wird durch den Namen des validierten Felds ersetzt.
Zusammenfassung
Die Datenvalidierung ist entscheidend, um Ihren Datensatz sauber, korrekt und vollständig zu halten. Die Datenvalidierung ermöglicht es Ihnen, Fehler in Ihren Daten zu beseitigen, die Ihr Projekt möglicherweise beschädigen oder anderweitig beeinträchtigen könnten. Die Validierung wird immer wichtiger, wenn im Maßstab und mit großen Datenmengen gearbeitet wird.
Laravel ermöglicht zahlreiche flexible Ansätze, um die Integrität und Genauigkeit der Daten sicherzustellen, die Ihre Anwendung durchlaufen. Sie können eine komplizierte Validierungslogik mit Standard- und anpassbaren Methoden erreichen, wodurch Ihre Codebasis gut strukturiert und leichter wiederverwendbar wird.
Versende deine Laravel-Apps schneller mit den Anwendungs-Hosting-Services von Kinsta.