Сейчас как никогда важно, чтобы данные в ваших приложениях были достоверными, точными и соответствовали всем системным требованиям. Он направлен на обеспечение согласованности данных и предотвращение уязвимостей в системе безопасности.
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 определены в маршруты/web.php файл для веб-приложения или маршруты /api.php для API. Для этого примера используйте API.php:
use App\Http\Controllers\UserController;
Route::post('/store', [UserController::class]);
Создайте контроллер
Запустите эту Artisan-команду, чтобы создать контроллер:
php artisan make:controller
UserController
Эта команда создает UserController.php файл в приложение/http/контроллеры каталог.
Теперь определите store
метод проверки данных, поступающих в конечную точку хранилища, перед их сохранением.
В этом примере будут проверены следующие поля с использованием этих правил:
- электронная почта — Должен быть уникальным, действительный адрес электронной почты и должен быть обязательным
- пароль — Должен иметь минимальную длину, подтверждение пароля и быть обязательным
- возраст — Должен быть числом и должен быть обязательным
<?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, который возвращает 422 Unprocessable Entity
HTTP-ответ в формате 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 файл в приложение/http/запросы каталог и содержит два метода по умолчанию:
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.