Правила валидации
На этой странице приведен список всех доступных правил валидации и их возможностей.
Обязательные и зависимые поля
Правила в этом разделе определяют, когда поле должно быть обязательно заполнено. Поле считается пустым, если его значение: null, пустая строка или пустой массив.
Если поле отсутствует в запросе — оно также считается пустым.
Типы данных
Правила в этом разделе проверяют тип данных и, в некоторых случаях, преобразуют значение к указанному типу.
Строки и форматы
Правила в этом разделе применяются к строковым значениям и проверяют их соответствие специальным форматам.
Числа и сравнения
Правила в этом разделе применяются к числовым значениям и сравнивают их с другими значениями.
Логические значения
Массивы
Правила в этом разделе применяются к массивам и проверяют их структуру.
Файлы
Правила в этом разделе проверяют корректность загруженных файлов и изображений, а также накладывают ограничения на их размер, тип и параметры. При успешной проверки файла, возвращается объект Imhotep\Http\UploadedFile.
Даты
В этом разделе собраны правила для работы с датой и временем. На выходе объект DateTimeInterface.
База данных
Правила в этом разделе проверяют существование значений в базе данных.
Универсальные правила
Правила в этом разделе универсальны и могут применяться к любым типам данных. Что именно сравнивается — зависит от типа данных:
| Тип значения | Что сравнивается |
|---|---|
| Число | само число |
| Строка | число символов (UTF-8) |
| Массив | число элементов |
| Загруженный файл | размер в байтах |
Полный список правил
accepted
Значение должно означать согласие пользователя.
Подробнее...
Допустимые значения: true, 1, "1", yes, on или y.
$data = $request->validate([
'terms' => 'accepted',
'age_confirm' => 'accepted',
]);
$data = $request->validate([
'privacy_policy' => 'required|accepted',
]);
accepted_if:field,value1,...
Согласие требуется, если другое поле имеет указанное значение.
Подробнее...
$data = $request->validate([
'plan' => 'required|in:free,pro,enterprise',
'terms_pro' => 'accepted_if:plan,pro,enterprise',
]);
$data = $request->validate([
'has_company' => 'required|boolean',
'company_terms' => 'accepted_if:has_company,true',
]);
array
Значение должно быть массивом.
Подробнее...
$data = $request->validate([
'items' => 'required|array|min:5',
'items.*.id' => 'required|int',
'items.*.quantity' => 'required|int|min:1',
]);
bool
Значение должно быть логическим типом.
Подробнее...
Принимает: true, false, 1, 0, "1", "0", "true", "false", "yes", "no", "on", "off", "y", "n".
Все эти значения преобразуются в bool.
$data = $request->validate([
'is_public' => 'bool',
]);
coords
Массив с координатами [широта, долгота]. Значения приводятся к float. Широта должна быть в диапазоне: -90…90, долгота: -180…180.
date
Значение должно быть датой.
Подробнее...
$data = $request->validate([
'birthday' => 'required|date',
'event_date' => 'nullable|date',
]);
after:дата_или_поле
Дата должна быть строго позже указанной даты или даты другого поля.
Подробнее...
$data = $request->validate([
'created_at' => 'required|date|after:2000-01-01', // позже 1 января 2000
]);
$data = $request->validate([
'finished_at' => 'required|date|after:now', // позже сегодняшнего дня
]);
$data = $request->validate([
'starts_at' => 'required|date',
'ends_at' => 'required|date|after:starts_at',
]);
before:дата_или_поле
Дата должна быть строго раньше указанной даты или даты другого поля.
Подробнее...
$data = $request->validate([
'birthday' => 'required|date|before:-18 years', // лица старше 18 лет
'expires_at' => 'required|date|before:2030-01-01', // раньше 1 января 2030
]);
$data = $request->validate([
'ends_at' => 'required|date',
'starts_at' => 'required|date|before:ends_at', // раньше даты окончания
]);
different:поле
Значение не должно строго совпадать со значением другого поля.
Подробнее...
$data = $request->validate([
'old_password' => 'required|string',
'new_password' => 'required|different:old_password|min:8',
]);
dimensions:param=value,...
Ограничения ширины, высоты и соотношения сторон изображения.
Подробнее...
Поддерживаемые параметры: min_width, max_width, min_height, max_height, width, height, ratio, min_ratio, max_ratio.
Параметр ratio задаётся как отношение ширины к высоте. Допустимы как дробный формат (например, 3/2), так и десятичный (1.5).
$data = $request->validate([
'cover' => 'required|image|dimensions:ratio=16/9,min_width=1280',
]);
$data = $request->validate([
'avatar' => 'required|image|dimensions:min_width=300,min_height=300',
]);
$data = $request->validate([
'photo' => 'nullable|image|dimensions:width=800,height=600',
]);
Значение должно быть корректным адресом электронной почты. Перед проверкой значение приводится к нижнему регистру.
Подробнее...
$data = $request->validate([
'email' => 'required|email:filter', // системная проверка PHP (FILTER_VALIDATE_EMAIL)
'support' => 'required|email:filter_unicode', // системная проверка с Unicode
'contact' => 'required|email:dns', // проверяет существование DNS-записей домена
'info' => 'required|email:idn', // поддерживает интернациональные доменные имена (IDN)
'admin' => 'required|email:idn,dns', // комбинация модификаторов
]);
exists
Значение должно существовать в указанной таблице базы данных.
Подробнее...
$data = $request->validate([
'user_id' => 'required|int|exists:users,id',
]);
Можно указать connection перед таблицей
$data = $request->validate([
'order_id' => 'required|exists:analytics.orders,id',
]);
Примечание: Если колонка не указан, используется имя правила. Поэтому на практике лучше всегда передавать колонку таблицы явно.
file
Поле должно содержать корректно загруженный файл без ошибок загрузки.
Подробнее...
$data = $request->validate([
'document' => 'required|file|max:10MB',
]);
fio
Строка из трёх частей (фамилия, имя, отчество), разделённых пробелом.
float
Значение должно быть числом с плавающей точкой. Числовая строка преобразуется в float.
Подробнее...
$data = $request->validate([
'price' => 'required|float|min:0.01',
]);
$data = $request->validate([
'latitude' => 'required|float|min:-90|max:90',
'longitude' => 'required|float|min:-180|max:180',
]);
gt:field_or_value
Размер значения должен быть больше указанного числа или значения другого поля.
Подробнее...
$data = $request->validate([
'age' => 'required|int|gt:18', // age должен быть > 18
'price' => 'required|int|gt:0', // price должен быть > 0
]);
// Сравнение с другим полем
$data = $request->validate([
'start_year' => 'required|int|min:2000',
'end_year' => 'required|int|gt:start_year', // end_year > start_year
'weight_short' => 'required|string|min:8',
'weight_full' => 'required|string|gt:weight_short', // weight_full > weight_short
]);
gte:field_or_value
Размер значения должен быть больше или равен указанному числу или значению другого поля.
Подробнее...
$data = $request->validate([
'age' => 'required|int|gte:18', // age должен быть >= 18
'quantity' => 'required|int|gte:1', // quantity должен быть >= 1
]);
$data = $request->validate([
'start_year' => 'required|int|min:2000',
'end_year' => 'required|int|gte:start_year', // end_year >= start_year
'weight_short' => 'required|string|min:8',
'weight_full' => 'required|string|gt:weight_short', // weight_full >= weight_short
]);
image[:ext1,...]
Файл должен быть изображением. Без параметров принимает все распространённые форматы: gif, jpeg, jpg, png, bmp, tiff, ico, webp, avif.
С параметром ограничивает допустимые расширения которые перечислены в нем.
Подробнее...
// Любое изображение
$data = $request->validate([
'avatar' => 'required|image|max:2MB',
]);
// Только JPG, PNG или WEBP
$data = $request->validate([
'avatar' => 'required|image:jpg,png,webp|max:2MB',
]);
in:value1,value2...
Значение должно входить в перечисленный список допустимых значений.
Подробнее...
$data = $request->validate([
'status' => 'required|in:draft,published,archived',
]);
int
Значение должно быть целым числом. Числовая строка преобразуется в int.
Подробнее...
$data = $request->validate([
'age' => 'int|min:1|max:100',
]);
json
Значение должно быть строкой с корректным JSON.
Подробнее...
$data = $request->validate([
'metadata' => 'required|json',
]);
lowercase
Строка должна быть в нижнем регистре.
uppercase
Строка должна быть в верхнем регистре.
min:value
Размер значения не меньше указанного.
Подробнее...
$data = $request->validate([
'title' => 'required|string|min:3',
'items' => 'required|array|min:1',
'age' => 'required|int|min:18',
]);
max:value
Размер значения не больше указанного.
Подробнее...
$data = $request->validate([
'title' => 'required|string|max:150',
'items' => 'required|array|max:20',
'avatar' => 'nullable|file|max:2MB',
]);
mimes:ext1,...
Исходное расширение файла должно входить в перечисленный список.
Подробнее...
$data = $request->validate([
'document' => 'required|file|mimes:pdf,docx|max:10MB',
]);
Внимание: Правило mimes основано на расширении исходного имени файла. Для безопасности содержимого всегда сочетайте его с file и храните загрузки вне публичного каталога.
nullable
Разрешает передавать null в поле. При получении значения null остальные правила валидации для этого поля пропускаются. Полезно, когда поле необязательно, но если оно передано — должно проходить валидацию.
Подробнее...
$data = $request->validate([
'middle_name' => 'nullable|string|max:100',
'avatar' => 'nullable|image|max:2048',
'bio' => 'nullable|string|max:500',
]);
numeric
Значение должно содержать только цифры (целое число). Это проверка формата, преобразования типа не происходит.
Подробнее...
$data = $request->validate([
'pin_code' => 'required|numeric|digits:4',
]);
phone
Российский номер телефона. Очищает от посторонних символов. Возвращает номер телефона в формате: 7900000000.
required
Проверяемое поле должно присутствовать во входных данные и не должно быть пустым.
Подробнее...
$data = $request->validate([
'name' => 'required|string',
]);
required_if:field,value1,...
Обязательно, если другое поле равно одному из перечисленных значений.
Подробнее...
$data = $request->validate([
'type' => 'required|in:person,company',
'company_name' => 'required_if:type,company|string|max:150',
]);
Если нужно указать несколько значений, перечислите их через запятую:
$data = $request->validate([
'delivery' => 'required|in:courier,digital,self',
'address' => 'required_if:delivery,courier,self|string',
]);
required_unless:field,value1,...
Обязательно, если другое поле не равно ни одному из перечисленных значений.
Подробнее...
// inn обязателен, если country != RU
$data = $request->validate([
'country' => 'required|string',
'inn' => 'required_unless:country,RU|string',
]);
// card_number обязателен, если payment_method = card
$data = $request->validate([
'payment_method' => 'required|in:card,cash,transfer',
'card_number' => 'required_unless:payment_method,cash,transfer|numeric',
]);
required_without:field1,...
Обязательно, если хотя бы одно из перечисленных полей пусто или отсутствует.
Подробнее...
// email обязателен, если не указан phone (и наоборот)
$data = $request->validate([
'email' => 'required_without:phone|email',
'phone' => 'required_without:email|phone',
]);
// contact обязателен, если email и phone не указаны
$data = $request->validate([
'contact' => 'required_without:email,phone|string',
]);
same:field
Значение должно строго совпадать со значением другого поля.
Подробнее...
$data = $request->validate([
'password' => 'required|string|min:8',
'password_confirmation' => 'required|same:password',
]);
size:value,...
Размер значения должен быть равен одному из перечисленных значений.
Подробнее...
$data = $request->validate([
'block_size' => 'required|int|size:16,32,64',
'thumbnail' => 'nullable|file|size:100KB,200KB',
]);
string
Значение должно быть строкой. Числовое значение преобразуется в строку.
Подробнее...
$data = $request->validate([
'name' => 'required|string|max:255',
]);
url
Значение должно быть корректным URL.
Подробнее...
$data = $request->validate([
'address' => 'nullable|url', // любой URL
'website' => 'nullable|url:https', // только HTTPS
'api' => 'required|url:http,https', // HTTP или HTTPS
'websocket' => 'required|url:ws,wss', // WebSocket
'ftp' => 'nullable|url:ftp,ftps', // FTP
]);