Walidacja danych w Laravel: wygodna i wydajna

Opublikowany: 2023-05-03

Teraz bardziej niż kiedykolwiek ważne jest, aby dane w aplikacjach były prawidłowe, dokładne i spełniały wszystkie wymagania systemowe. Odpowiada na potrzebę zachowania spójności danych i unikania luk w zabezpieczeniach.

Laravel sprawia, że ​​walidacja danych jest łatwa i intuicyjna. Jest zgodny z architekturą kontrolera widoku modelu (MVC) i wymaga jedynie ogólnej znajomości PHP i koncepcji programowania obiektowego (OOP). Ponadto Laravel oferuje kilka metod walidacji przychodzących danych.

Zapoznaj się z niektórymi z tych podejść i dowiedz się, jak zastosować reguły sprawdzania poprawności do swojego zestawu danych.

Łatwa walidacja danych w Laravel

Laravel zapewnia kilka gotowych do użycia reguł sprawdzania poprawności, kiedy użytkownicy Twojej aplikacji przesyłają dane za pośrednictwem formularzy. Możesz oznaczyć pola wejściowe zgodnie z wymaganiami, ustawić minimalną lub maksymalną długość oraz wymagać unikalnych (nieduplikatów) wpisów i prawidłowych adresów e-mail. Walidator Laravel sprawdza, czy dane wejściowe spełniają te lub inne określone przez Ciebie reguły.

Te zasady sprawdzania poprawności Laravel obejmują:

  • required — Dane pola nie mogą być puste ani puste.
  • array — Dane pola muszą być tablicą PHP.
  • bail — Reguła sprawdzania poprawności przestaje działać po napotkaniu pierwszego niepowodzenia sprawdzania poprawności.
  • email — dane w polu muszą być poprawnym adresem e-mail.
  • unique — Dane pola nie mogą mieć duplikatów w tabeli bazy danych.

Wszystkie metody walidacji mają wady i zalety, ale ich różnorodność pozwala wybrać podejście najlepsze dla Twoich potrzeb. W zależności od wybranej metody walidacja Laravel może odbywać się na kilka sposobów, z ręcznymi lub automatycznymi komunikatami o błędach.

Najpopularniejszą metodą jest code>validate, używana do przychodzących żądań HTTP. Ta metoda jest powiązana z danymi żądania, wykonując reguły sprawdzania poprawności. Możesz oddzielić reguły dla każdego pola przecinkami, jak pokazano w poniższym przykładzie.

 use Illuminate\Http\Request; public function store (Request $request){ $validated = $request->validate([ 'email' => ['required, unique:users, email, bail'], 'name' => ['required'], ]); }

W tym przypadku email jest wymaganym wejściem, co oznacza, że ​​nie może mieć wartości null. Dodatkowo musi być unikalny w tabeli bazy danych users , co gwarantuje, że ten sam adres e-mail nie zostanie zarejestrowany dwukrotnie. Ostatnia zasada mówi, że adres e-mail musi być również ważny. W przeciwnym razie proces walidacji zostaje przerwany. Pole nazwy jest wymagane, ale nie ma żadnych innych reguł.

Jeśli jakakolwiek reguła sprawdzania poprawności Laravel zawiedzie, odpowiedź jest generowana automatycznie.

Nie pozwól, aby jeden błąd danych zrujnował całą Twoją ciężką pracę! Zweryfikuj swoje dane i zadbaj o bezpieczeństwo swojego projektu ️ Kliknij, aby tweetować

Podstawy walidacji

Aby lepiej zrozumieć metody sprawdzania poprawności, rozważ poniższy przykład. Zdefiniujesz trasę dla punktu końcowego i utworzysz kontroler do sprawdzania poprawności i przetwarzania danych żądania.

Najpierw utwórz prosty punkt końcowy, który pozwoli użytkownikom przechowywać ich e-maile i hasła.

Zdefiniuj trasę

Trasy Laravel są zdefiniowane w pliku tras/web.php dla aplikacji internetowej lub tras/api.php dla interfejsu API. W tym przykładzie użyj api.php :

 use App\Http\Controllers\UserController; Route::post('/store', [UserController::class]);

Utwórz kontroler

Uruchom to polecenie Artisan, aby utworzyć kontroler:

 php artisan make:controller UserController

To polecenie tworzy plik UserController.php w katalogu app/Http/Controllers .

Teraz zdefiniuj metodę store , aby sprawdzić poprawność danych wprowadzanych do punktu końcowego sklepu przed ich zapisaniem.

Ten przykład sprawdzi poprawność następujących pól przy użyciu tych reguł:

  • e-mail — powinien być unikalny, prawidłowy adres e-mail i musi być wymagany
  • hasło — powinno mieć minimalną długość, potwierdzenie hasła i musi być wymagane
  • wiek — musi być liczbą i musi być wymagany
 <?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 } }

confirmed reguła umożliwia dwukrotne wymaganie określonego pola w celu sprawdzenia poprawności danych, na przykład użytkownicy ponownie wprowadzają swoje hasła podczas rejestracji. Ta reguła wymaga pola o nazwie password_confirmation , którego dane muszą pasować do pola hasła .

Wyświetl komunikaty o błędach

Jeśli kryteria weryfikacji zostaną spełnione, Twój kod będzie działał normalnie. Jeśli sprawdzanie poprawności nie powiedzie się, zostanie zgłoszony wyjątek IlluminateValidationValidationException i zwrócona zostanie odpowiednia odpowiedź na błąd.

Przykład jest oparty na interfejsie API, który zwraca odpowiedź HTTP 422 Unprocessable Entity w formacie JSON. W przypadku aplikacji internetowych przekierowuje do poprzedniego adresu URL, aby wyświetlić komunikat o błędzie, a dane żądania są przesyłane do sesji.

Możesz użyć zmiennej $errors w swoich widokach, aby wyświetlić zwrócone błędy:

 @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif

Możesz także wyświetlić tylko pierwszy błąd lub przejść przez pętlę, aby wyświetlić je wszystkie.

 // Fetch all errors $errors->all() // Fetch only the first error $errors->first()

Ponownie wypełnij formularze

Ponowne wypełnianie formularzy oszczędza użytkownikom ponownego wpisywania informacji, dzięki czemu mogą skupić się na naprawianiu błędu. W przykładzie adresu e-mail, który się nie powiedzie, możesz ponownie wypełnić resztę formularza, wywołując starą wartość pola name .

 $name = $request-> old('name') //Blade helper <input type="text" name="name" value="{{ old('name') }}">

Ta reguła zwróci null , jeśli nie było żadnych wcześniejszych danych wejściowych.

Zaawansowana walidacja

Laravel zapewnia inną metodę pisania walidacji zwaną żądaniami formularzy. Żądanie formularza to niestandardowa klasa żądania, która organizuje walidacje i odciąża kontroler.

Posiadają własną logikę sprawdzania poprawności i autoryzacji odpowiednią dla dużych ilości danych wejściowych i mogą być używane do definiowania reguł sprawdzania poprawności i dostosowywania komunikatów o błędach.

Aby utworzyć żądanie formularza, uruchom to polecenie Artisan:

 php artisan make:request StoreUserRequest

To polecenie tworzy plik StoreUserRequest.php w katalogu app/Http/Requests i zawiera dwie domyślne metody:

  • rules zwraca reguły sprawdzania poprawności danych żądania.
  • authorize zwraca wartość logiczną określającą, czy dany użytkownik ma uprawnienia do wykonania żądanej akcji.

Przekonwertuj poprzedni przykład, aby użyć żądania formularza.

 <?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' ]; } }

Aby dostosować komunikaty o błędach w tych regułach, można zastąpić metodę komunikatów w klasie 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' ]; }

Uwaga: Nazwa danych i reguła sprawdzania poprawności są oddzielone kropką (.) przed danymi komunikatu.

Walidacja niestandardowa

Aby utworzyć niestandardową walidację, możesz użyć fasady Validator zamiast validate . Instancja walidatora zawiera dwa argumenty: dane do walidacji oraz tablicę reguł walidacji. Te dwa argumenty są przekazywane do metody ::make na fasadzie walidatora, generując nową instancję walidatora.

 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 }

Jeśli chcesz dodać automatyczne polecenie bezpośrednie, możesz wykonać metodę validate na istniejącej już instancji walidatora. Jeśli sprawdzanie poprawności nie powiedzie się, żądanie XHR generuje odpowiedź JSON z kodem stanu 422 Unprocessable Entity lub użytkownik zostanie natychmiast przekierowany.

 $validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'password' => 'required|min:7|confirmed' ])->validate();

Możesz także dostosować komunikaty o błędach, przekazując trzeci argument o nazwie messages do 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.', ]);

Uwaga: :attribute jest zastępowane nazwą pola podlegającego walidacji.

Praca z dużymi ilościami danych może szybko wymknąć się spod kontroli. Chroń swój projekt (i swoje zdrowie psychiczne!) za pomocą walidacji Laravel. Oto jak kliknąć, aby tweetować

Streszczenie

Przeprowadzanie sprawdzania poprawności danych ma kluczowe znaczenie dla utrzymania czystego, poprawnego i kompletnego zbioru danych. Walidacja danych pozwala wyeliminować błędy w danych, które mogłyby potencjalnie uszkodzić lub w inny sposób wpłynąć na projekt. Walidacja staje się coraz ważniejsza podczas pracy na dużą skalę iz dużą ilością danych.

Laravel umożliwia wiele elastycznych podejść w celu zapewnienia integralności i dokładności danych przechodzących przez aplikację. Możesz osiągnąć skomplikowaną logikę walidacji za pomocą domyślnych i dostosowywalnych metod, dzięki czemu baza kodu ma dobrą strukturę i jest łatwiejsza do ponownego użycia.

Szybciej wysyłaj swoje aplikacje Laravel dzięki usługom hostingu aplikacji Kinsta.