Проверка данных в Laravel: удобно и мощно
Опубликовано: 2023-05-03Сейчас как никогда важно, чтобы данные в ваших приложениях были достоверными, точными и соответствовали всем системным требованиям. В нем учитывается необходимость поддерживать согласованность данных и избегать уязвимостей в системе безопасности.
Laravel делает проверку данных простой и интуитивно понятной. Он следует архитектуре контроллера представления модели (MVC) и требует только общих знаний о PHP и концепциях объектно-ориентированного программирования (ООП). Более того, Laravel предлагает несколько методов проверки входящих данных.
Изучите некоторые из этих подходов и способы применения правил проверки к вашему набору данных.
Проверка данных в Laravel стала проще
Laravel предоставляет несколько готовых к использованию правил проверки, когда пользователи вашего приложения отправляют данные через формы. Вы можете пометить поля ввода как обязательные, установить минимальную или максимальную длину и потребовать уникальные (не повторяющиеся) записи и действительные адреса электронной почты. Валидатор Laravel проверяет, удовлетворяет ли ввод этим правилам или любым другим, которые вы укажете.
Эти правила проверки Laravel включают в себя:
-
required
— Данные поля не должны быть нулевыми или пустыми. -
array
— Данные поля должны быть массивом PHP. -
bail
— Правило проверки прекращает выполнение после того, как обнаруживает первую ошибку проверки. -
email
— данные поля должны быть действительным адресом электронной почты. -
unique
— данные поля не должны иметь дубликатов в таблице базы данных.
У всех методов проверки есть свои плюсы и минусы, но их разнообразие позволяет выбрать лучший подход для ваших нужд. В зависимости от выбранного вами метода проверка Laravel может происходить несколькими способами, с ручными или автоматическими сообщениями об ошибках.
Самый распространенный метод — code>validate, используемый для входящих HTTP-запросов. Этот метод привязан к данным запроса, выполняя правила проверки. Вы можете разделить правила для каждого поля запятыми, как показано в примере ниже.
use Illuminate\Http\Request; public function store (Request $request){ $validated = $request->validate([ 'email' => ['required, unique:users, email, bail'], 'name' => ['required'], ]); }
Здесь email
является обязательным входом, то есть она не может быть нулевой. Кроме того, он должен быть уникальным в таблице базы данных users
, чтобы один и тот же адрес электронной почты не регистрировался дважды. Последнее правило требует, чтобы адрес электронной почты также был действительным. В противном случае процесс проверки прекращается. Поле имени является обязательным, но не имеет других правил.
Если какое-либо правило проверки Laravel не работает, ответ генерируется автоматически.
Основы проверки
Чтобы лучше понять методы проверки, рассмотрим следующий пример. Вы определите маршрут для конечной точки и создадите контроллер для проверки и обработки данных запроса.
Во-первых, создайте простую конечную точку, которая позволит пользователям хранить свои электронные письма и пароли.
Определить маршрут
Маршруты Laravel определяются в файле route/web.php для веб-приложения или в файле route/api.php для API. В этом примере используйте api.php :
use App\Http\Controllers\UserController; Route::post('/store', [UserController::class]);
Создайте контроллер
Запустите эту Artisan-команду, чтобы создать контроллер:
php artisan make:controller UserController
Эта команда создает файл UserController.php в каталоге app/Http/Controllers .
Теперь определите метод store
для проверки данных, поступающих в конечную точку хранилища, перед их сохранением.
В этом примере будут проверены следующие поля с использованием этих правил:
- электронная почта — Должен быть уникальным, действительным адресом электронной почты и должен быть обязательным
- пароль — Должен иметь минимальную длину, подтверждение пароля и должен быть обязательным
- age — должен быть числом и должен быть обязательным
<?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
правило позволяет вам дважды запрашивать конкретное поле, чтобы убедиться, что данные верны, например, пользователи повторно вводят свои пароли во время регистрации. Для этого правила требуется поле с именем password_confirmation
, данные которого должны совпадать с полем пароля .
Отображение сообщений об ошибках
Если критерии проверки соблюдены, ваш код продолжит работать в обычном режиме. Если проверка не пройдена, создается исключение IlluminateValidationValidationException
и возвращается соответствующий ответ об ошибке.
Пример основан на API, который возвращает HTTP-ответ 422 Unprocessable Entity
в формате JSON. Для веб-приложений он будет перенаправлять на предыдущий URL-адрес для отображения сообщения об ошибке, а данные запроса будут переданы в сеанс.
Вы можете использовать переменную $errors
в своих представлениях для отображения возвращенных ошибок:
@if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
Вы также можете просмотреть только первую ошибку или просмотреть их все в цикле.
// Fetch all errors $errors->all() // Fetch only the first error $errors->first()
Повторное заполнение форм
Повторное заполнение форм избавляет пользователей от повторного ввода информации, поэтому они могут сосредоточиться на исправлении ошибки. В примере с ошибкой адреса электронной почты вы можете повторно заполнить оставшуюся часть формы, вызвав старое значение для поля name
.
$name = $request-> old('name') //Blade helper <input type="text" name="name" value="{{ old('name') }}">
Это правило вернет null
если не было предыдущего ввода.
Расширенная проверка
Laravel предоставляет другой метод написания валидаций, называемый запросами формы. Запрос формы — это настраиваемый класс запроса, который организует проверки и упорядочивает ваш контроллер.
Они имеют собственную логику проверки и авторизации, подходящую для больших объемов ввода, и могут использоваться для определения правил проверки и настройки сообщений об ошибках.
Чтобы создать запрос формы, запустите эту Artisan-команду:
php artisan make:request StoreUserRequest
Эта команда создает файл StoreUserRequest.php в каталоге app/Http/Requests и содержит два метода по умолчанию:
-
rules
возвращает правила проверки для данных запроса. -
authorize
возвращает логическое значение, чтобы указать, есть ли у этого пользователя разрешение на выполнение запрошенного действия.
Преобразуйте предыдущий пример, чтобы использовать форму запроса.
<?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' ]; } }
Чтобы настроить сообщения об ошибках этих правил, вы можете переопределить метод messages в классе 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' ]; }
Примечание. Имя данных и правило проверки разделяются точкой (.) перед данными сообщения.
Пользовательская проверка
Чтобы создать пользовательскую проверку, вы можете использовать фасад Validator
вместо validate
. Экземпляр валидатора содержит два аргумента: данные для проверки и массив правил проверки. Эти два аргумента передаются в метод ::make
на фасаде валидатора, создавая новый экземпляр валидатора.
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 }
Если вы хотите добавить автоматический прямой, вы можете выполнить метод validate
на уже существующем экземпляре валидатора. Если проверка не пройдена, запрос XHR создает ответ JSON с кодом состояния 422 Unprocessable Entity
, иначе пользователь будет немедленно перенаправлен.
$validator = Validator::make($request->all(),[ 'email' => 'required|unique:users|email', 'password' => 'required|min:7|confirmed' ])->validate();
Вы также можете настроить сообщения об ошибках, передав третий аргумент с именем messages
в 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.', ]);
Примечание. :attribute
заменяется именем проверяемого поля.
Краткое содержание
Выполнение проверки данных имеет решающее значение для поддержания чистоты, правильности и полноты набора данных. Проверка данных позволяет устранить ошибки в ваших данных, которые потенциально могут повредить или иным образом повлиять на ваш проект. Проверка становится все более важной при работе в масштабе и с большими объемами данных.
Laravel предлагает множество гибких подходов для обеспечения целостности и точности данных, проходящих через ваше приложение. Вы можете реализовать сложную логику проверки с помощью стандартных и настраиваемых методов, что сделает вашу кодовую базу хорошо структурированной и более удобной для повторного использования.
Отправляйте свои приложения Laravel быстрее с услугами хостинга приложений Kinsta.