Validarea datelor în Laravel: convenabilă și puternică
Publicat: 2023-05-03Acum, mai mult ca niciodată, este esențial ca datele din aplicațiile dvs. să fie valide, exacte și să îndeplinească toate cerințele de sistem. Acesta abordează nevoia de a menține coerența datelor și de a evita vulnerabilitățile de securitate.
Laravel face validarea datelor ușoară și intuitivă. Urmează o arhitectură MVC (model view controller) și necesită doar cunoștințe generale despre PHP și conceptele de programare orientată pe obiecte (OOP). Mai mult, Laravel oferă mai multe metode de validare a datelor primite.
Explorați unele dintre aceste abordări și cum să aplicați reguli de validare setului dvs. de date.
Validarea datelor este ușoară în Laravel
Laravel oferă mai multe reguli de validare gata de utilizare pentru atunci când utilizatorii aplicației dvs. trimit date prin formulare. Puteți marca câmpurile de introducere ca fiind necesare, puteți stabili o lungime minimă sau maximă și puteți solicita intrări unice (neduplicate) și adrese de e-mail valide. Validatorul Laravel verifică dacă intrarea îndeplinește aceste reguli sau altele pe care le specificați.
Aceste reguli de validare Laravel includ:
-
required
— Datele câmpului nu trebuie să fie nule sau goale. -
array
— Datele câmpului trebuie să fie o matrice PHP. -
bail
— Regula de validare se oprește după ce întâlnește primul eșec de validare. -
email
— Datele câmpului trebuie să fie o adresă de e-mail validă. -
unique
— Datele câmpului nu trebuie să aibă duplicate în tabelul bazei de date.
Toate metodele de validare au argumente pro și contra, dar varietatea lor vă permite să alegeți cea mai bună abordare pentru nevoile dvs. În funcție de metoda aleasă, validarea Laravel poate avea loc în mai multe moduri, cu mesaje de eroare manuale sau automate.
Cea mai comună metodă este cod>validate, folosită pentru solicitările HTTP primite. Această metodă este legată de datele cererii, executând regulile de validare. Puteți separa regulile pentru fiecare câmp prin virgule, așa cum se vede în exemplul de mai jos.
use Illuminate\Http\Request; public function store (Request $request){ $validated = $request->validate([ 'email' => ['required, unique:users, email, bail'], 'name' => ['required'], ]); }
Aici, email
este o intrare obligatorie, ceea ce înseamnă că nu poate fi nul. În plus, trebuie să fie unic în tabelul bazei de date users
, asigurându-se că aceeași adresă de e-mail nu este înregistrată de două ori. Ultima regulă impune ca și adresa de e-mail să fie validă. În caz contrar, procesul de validare încetează. Câmpul de nume este obligatoriu, dar nu are alte reguli.
Dacă vreo regulă de validare Laravel eșuează, un răspuns este generat automat.
Bazele validării
Pentru a înțelege mai bine metodele de validare, luați în considerare următorul exemplu. Veți defini o rută pentru punctul final și veți crea un controler pentru a valida și procesa datele cererii.
Mai întâi, creați un punct final simplu care să permită utilizatorilor să-și stocheze e-mailurile și parolele.
Definiți traseul
Rutele Laravel sunt definite în fișierul routes/web.php pentru o aplicație web sau routes/api.php pentru un API. Pentru acest exemplu, utilizați api.php :
use App\Http\Controllers\UserController; Route::post('/store', [UserController::class]);
Creați controlerul
Rulați această comandă Artisan pentru a crea controlerul:
php artisan make:controller UserController
Această comandă creează un fișier UserController.php în directorul app/Http/Controllers .
Acum, definiți o metodă store
pentru a valida datele care intră în punctul final al magazinului înainte de a le stoca.
Acest exemplu va valida următoarele câmpuri folosind aceste reguli:
- e-mail — Ar trebui să fie unic, un e-mail valid și trebuie să fie obligatoriu
- parola — Ar trebui să aibă o lungime minimă, confirmarea parolei și trebuie să fie obligatorie
- vârsta — Trebuie să fie un număr și trebuie să fie solicitat
<?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 } }
Regula confirmed
vă permite să solicitați un anumit câmp de două ori pentru a verifica dacă datele sunt corecte, cum ar fi utilizatorii care își reintroduc parolele în timpul înregistrării. Această regulă necesită un câmp numit password_confirmation
, ale cărui date trebuie să se potrivească cu câmpul parolei .
Afișează mesaje de eroare
Dacă criteriile de validare sunt îndeplinite, codul dumneavoastră va continua să ruleze normal. Dacă validarea eșuează, este lansată o excepție IlluminateValidationValidationException
și este returnat răspunsul de eroare corespunzător.
Exemplul se bazează pe un API, care returnează un răspuns HTTP 422 Unprocessable Entity
în format JSON. Pentru aplicațiile web, ar redirecționa către adresa URL anterioară pentru a afișa mesajul de eroare, iar datele de solicitare vor fi afișate intermitent în sesiune.
Puteți utiliza variabila $errors
în vizualizările dvs. pentru a afișa erorile returnate:
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
De asemenea, puteți alege să vizualizați numai prima eroare sau să treceți în buclă pentru a le vizualiza pe toate.
// Fetch all errors $errors->all() // Fetch only the first error $errors->first()
Repopulați formularele
Repopularea formularelor scutește utilizatorii de a reintroduce informații, astfel încât aceștia să se poată concentra pe remedierea erorii. În exemplul unei adrese de e-mail care eșuează, puteți repopula restul formularului apelând vechea valoare pentru câmpul name
.
$name = $request-> old('name') //Blade helper <input type="text" name="name" value="{{ old('name') }}">
Această regulă va returna null
dacă nu a existat nicio intrare anterioară.
Validare avansată
Laravel oferă o altă metodă de scriere a validărilor numită cereri de formular. O solicitare de formular este o clasă de solicitări personalizată care organizează validările și dezordinea controlerul.
Acestea au propria lor logică de validare și autorizare potrivită pentru volume mari de intrare și pot fi utilizate pentru a defini reguli de validare și a personaliza mesajele de eroare.
Pentru a crea o cerere de formular, rulați această comandă Artisan:
php artisan make:request StoreUserRequest
Această comandă creează un fișier StoreUserRequest.php în directorul app/Http/Requests și conține două metode implicite:
-
rules
returnează regulile de validare pentru datele de solicitare. -
authorize
returnează un boolean pentru a indica dacă acel utilizator are permisiunea de a efectua acțiunea solicitată.
Convertiți exemplul anterior pentru a utiliza o cerere de formular.
<?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' ]; } }
Pentru a personaliza mesajele de eroare ale acestor reguli, puteți suprascrie metoda mesajelor din clasa FormRequest
.
/** * 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' ]; }
Notă: Numele datelor și regula de validare sunt separate printr-un punct (.) înainte de datele mesajului.
Validare personalizată
Pentru a crea o validare personalizată, puteți utiliza o fațadă Validator
în loc de validate
. Instanța validatorului conține două argumente: datele de validat și o serie de reguli de validare. Aceste două argumente sunt transmise metodei ::make
de pe fațada validatorului, generând o nouă instanță validator.
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 }
Dacă doriți să adăugați o directă automată, puteți executa metoda validate
pe o instanță de validare preexistentă. Dacă validarea eșuează, o solicitare XHR produce un răspuns JSON cu 422 Unprocessable Entity
ca cod de stare, sau utilizatorul va fi redirecționat imediat.
$validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'password' => 'required|min:7|confirmed' ])->validate();
De asemenea, puteți personaliza mesajele de eroare trecând un al treilea argument numit messages
către Validate::make method
:
$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.', ]);
Notă: :attribute
este înlocuit cu numele câmpului în curs de validare.
rezumat
Efectuarea validării datelor este crucială pentru menținerea setului de date curat, corect și complet. Validarea datelor vă permite să eliminați erorile din datele dvs. care ar putea să vă corupeze sau să vă influențeze proiectul. Validarea devine din ce în ce mai importantă atunci când se lucrează la scară și cu cantități mari de date.
Laravel permite numeroase abordări flexibile pentru a asigura integritatea și acuratețea datelor care trec prin aplicația dvs. Puteți obține o logică de validare complicată cu metode implicite și personalizabile, făcând baza de cod bine structurată și mai ușor de reutilizat.
Trimiteți-vă aplicațiile Laravel mai repede cu serviciile de găzduire a aplicațiilor Kinsta.