Проверка данных в 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 предлагает множество гибких подходов для обеспечения целостности и точности данных, проходящих через ваше приложение. Вы можете реализовать сложную логику проверки с помощью стандартных и настраиваемых методов, что сделает вашу кодовую базу хорошо структурированной и более удобной для повторного использования.

Отправляйте свои приложения Laravel быстрее с услугами хостинга приложений Kinsta.