• Czas czytania ~3 min
  • 08.09.2023

Dzisiejszy post jest znowu trochę o oczywistej rzeczy, walidacji danych. Dlaczego potrzebna jest weryfikacja, jak jej używać, reguły niestandardowe i dlaczego musisz używać żądania formularza do sprawdzania poprawności.

Jeśli mówimy o projektach, na które natknąłem się na freelancingu, bardzo często otrzymywanie danych od użytkownika wyglądało tak: W czym tkwi problem? Przy takim otrzymywaniu danych od użytkownika programista otwiera możliwość przeprowadzenia dwóch rodzajów ataków na swoją aplikację:

  1. XSS (Cross-Site Scripting — «міжсайтовий скриптинг») — досить поширена вразливість, яку можна виявити в багатьох веб-додатках. Її суть досить проста, зловмиснику вдається впровадити на сторінку JavaScript-код, який не було передбачено розробниками.
  2. SQL-ін'єкція (SQL-injection) - це вразливість веб-безпеки, яка дозволяє зловмиснику втручатися в запити, які додаток робить до своєї бази даних. Як правило, це дозволяє переглядати дані, які він зазвичай не може отримати. Це можуть бути інші користувачі, або будь-які інші дані, доступ до яких має сам додаток. У багатьох випадках зловмисник може змінювати або видаляти ці дані, викликаючи постійні зміни у вмісті або поведінці програми.

Tak więc, po pierwsze, walidacja ma na celu zapewnienie bezpieczeństwa danych w aplikacji, a po drugie, walidacja gwarantuje poprawność danych, wprowadzone przez użytkownika i pomaga uniknąć nieprawidłowych danych w bazie danych.

Istnieje kilka sposobów sprawdzania poprawności danych w Laravel:

  1. Використання методу validate який реалізований в трейті ValidatesRequests. За замовчуванням усі контролери, які розширюють базовий контролер наслідують цей трейт. Сам метод validate  приймає в себе об'єкт класу Illuminate\Http\Request, масив правил для валідації полів, масив з кастомними меседжами для виводу помилок, та масив з кастомними атрибутами останні два не є обов'язковими. Тому виконати валідацію даних можливо одразу в контролері, засобами самого контролела і виглядає це так:

2. Możliwe jest również użycie metody samej klasy Illuminate\Http\Request, która pobiera prawie te same dane, co w poprzednim przykładzie, z wyjątkiem obiektu $requestvalidate klasy .

3. Innym sposobem walidacji jest ręczne utworzenie walidatora za pomocą fasady Illuminate\Validation\Validator i jego metody. Pierwszy argument przekazany makedo metodymake odbiera dane do testowania. Drugim argumentem są reguły sprawdzania poprawności, które powinny być stosowane do danych.

4. Moim zdaniem ta metoda jest najbardziej poprawna z architektonicznego punktu widzenia. Zastosowanie walidacji poprzez oddzielną klasę, która implementuje Form Request, pozwala rozwiązać jedną z głównych zasad SOLID - zasadę pojedynczej odpowiedzialności. Laravel ma już zaimplementowane polecenie do tworzenia klasy Form Request:php artisan make:

request NewValidationRequest

To polecenie utworzy następną klasę w app/Http/Requests, domyślnie klasa jest tworzona za pomocą dwóch metod authorize i rules. Metoda pozwala zaimplementować logikę sprawdzania, czy użytkownik ma niezbędne uprawnienia do wykonania żądania. Jeśli powróci, zapytanie będzie kontynuowane do metody rules authorize sprawdzania poprawności. Jeśli authorize authorize powrócitruefalse, użytkownik zostanie przekierowany na stronę błędu lub przetworzony zgodnie z określoną logiką niestandardową. Metoda rules Przechowuje i zwraca tablicę reguł, względem których będą sprawdzane dane wejściowe. Klasę tę można rozszerzyćmessages, implementując metody i , które z kolei zwrócą niestandardowe komunikaty dla błędów sprawdzania poprawności i attributesniestandardowe nazwy dla atrybutów.

Możliwe jest uzyskanie czystych danych w kontrolerze podczas korzystania z klasy Form Request w taki sam sposób, jak w przypadku korzystania ze zwykłego walidatora klasy Request:

I nie kopiuj-wklej i wyświetla listę wszystkich dostępnych reguł walidacji. Oficjalna dokumentacja opisuje wszystkie możliwe zasady https://laravel.com/docs/10.x/validation#available-validation-rules, ale jeśli te reguły nie wystarczą, aby pokryć wszystkie pola, Laravel ma mechanizm tworzenia własnych niestandardowych reguł sprawdzania poprawności.

Ten mechanizm umożliwia tworzenie własnych reguł sprawdzania poprawności, które spełniają określone potrzeby aplikacji. Aby utworzyć nową regułę, użyj polecenia:php artisan make:

rule CustomValidationRule

Tworzy nową regułę w folderze app/Rules, a sama klasa implementuje tylko 2 metodypasses, które powinny zawierać logikę, według której pole będzie sprawdzane i message która przechowuje komunikat, gdy dane są nieprawidłowe.

Aby użyć tej reguły w walidacji, wystarczy dodać ją do tablicy reguł:Istnieje również kilka sposobów odbierania i obsługi błędów, w zależności od opcji, za pomocą której dane są sprawdzane. Jeśli chcesz uzyskać błędy podczas korzystania z klasy Validator, wszystkie błędy można uzyskać, odwołując się do :A jeśli obiekt klasy Request został użyty do errorswalidacji, możesz uzyskać błędy z sesji :

W przypadku, gdy trzeba obsłużyć błędy w plikach kasetowych, wstawiana jest tam zmienna $errors globalna, która automatycznie staje się dostępna dla wszystkich układów, a także jest instancją klasy MessageBag.

Приклад виводу всіх помилок в циклі

Lub, jeśli chcesz wyświetlić określony błąd, na przykład dyrektywa pomocnicza jest używana dla jednego pola@error

Приклад виводу однієї вибранох помилки

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297