Правила валидации форм
На этой странице собраны не все правила валидации, с полным списком можно познакомится тут.
| Значение | Действие |
|---|---|
accepted
|
Проверяемое поле должно иметь значение "yes", "on", 1, или true. Применяется для валидации принятия «Условий использования» или аналогичных полей |
accepted_if:anotherfield,value,...
|
Проверяемое поле должно иметь значение "yes", "on", 1, или true, если другое проверяемое поле равно указанному значению. Это полезно для валидации принятия «Условий использования» или аналогичных полей |
active_url
|
Проверяемое поле должно иметь допустимую запись A или AAAA в соответствии с функцией dns_get_record PHP. Имя хоста указанного URL извлекается с помощью PHP-функции parse_url перед передачей в dns_get_record |
after:date
|
Проверяемое поле должно иметь значение после указанной даты. Даты будут переданы в функцию strtotime PHP для преобразования в действительный экземпляр DateTime:
Вместо передачи строки даты, которая будет проанализирована с помощью
|
after_or_equal:date
|
Проверяемое поле должно иметь значение после указанной даты или равное ей. Для получения дополнительной информации см. правило after |
alpha
|
Проверяемое поле должно состоять полностью из букв |
alpha_dash
|
Проверяемое поле может содержать буквенно-цифровые символы, а также дефисы и подчеркивания |
alpha_num
|
Проверяемое поле должно состоять полностью из буквенно-цифровых символов |
array
|
Проверяемое поле должно быть массивом PHP. Когда для правила array предоставляются дополнительные значения, каждый ключ во входном массиве должен присутствовать в списке значений, предоставленных правилу. В следующем примере ключ admin во входном массиве недействителен, поскольку он не содержится в списке значений, предоставленных правилу array:
В общем, вы всегда должны указывать ключи массива, которые могут присутствовать в вашем массиве. В противном случае методы валидатора validate и validated вернут все проверенные данные, включая массив и все его ключи, даже если эти ключи не были проверены другими правилами проверки вложенных массивов.
Если вы хотите, вы можете указать валидатору Laravel никогда не включать непроверенные ключи массива в «проверенные» данные, которые он возвращает, даже если вы используете правило array без указания списка разрешенных ключей. Для этого вы можете вызвать метод валидатора excludeUnvalidatedArrayKeys в методе boot класса AppServiceProvider вашего приложения. После этого валидатор будет включать ключи массива в «проверенные» данные, которые он возвращает, только если эти ключи были специально проверены с помощью правил вложенных массивов:
|
bail
|
Остановить дальнейшее применение правил валидации атрибута после первой неуспешной проверки. В отличие от правила bail, которое прекращает дальнейшую валидацию только конкретного поля, метод stopOnFirstFailure сообщит валидатору, что он должен прекратить дальнейшую валидацию всех атрибутов при возникновении первой ошибке:
|
before:date
|
Проверяемое поле должно быть значением, предшествующим указанной дате. Даты будут переданы в функцию PHP strtotime для преобразования в действительный экземпляр DateTime. Кроме того, как и в правиле after, имя другого проверяемого поля может быть указано в качестве значения date |
before_or_equal:date
|
Проверяемое поле должно иметь значение, предшествующее указанной дате или равное ей. Даты будут переданы в функцию PHP strtotime для преобразования в действительный экземпляр DateTime. Кроме того, как и в правиле after, имя другого проверяемого поля может быть указано в качестве значения date |
between:min,max
|
Проверяемое поле должно иметь размер между указанными min и max. Строки, числа, массивы и файлы оцениваются так же, как и в правиле size |
boolean
|
Проверяемое поле должно иметь возможность преобразования в логическое значение. Допустимые значения: true, false, 1, 0, "1", и "0" |
confirmed
|
Проверяемое поле должно иметь совпадающее поле {field}_confirmation. Например, если проверяемое поле — password, то поле password_confirmation также должно присутствовать во входящих данных |
current_password
|
Проверяемое поле должно соответствовать паролю аутентифицированного пользователя. Вы можете указать охранника аутентификации используя первый параметр правила:
|
date
|
Проверяемое поле должно быть действительной, не относительной датой в соответствии с функцией strtotime PHP |
date_equals:date
|
Проверяемое поле должно быть равно указанной дате. Даты будут переданы в функцию strtotime PHP для преобразования в действительный экземпляр DateTime |
date_format:format
|
Проверяемое поле должно соответствовать переданному format. При валидации поля следует использовать либо date, либо date_format, а не то и другое вместе. Это правило валидации поддерживает все форматы, поддерживаемые классом DateTime PHP |
declined
|
Проверяемое поле должно иметь значение"no", "off", 0, или false |
declined_if:anotherfield,value,...
|
Проверяемое поле должно иметь значение"no", "off", 0, or false, если другое проверяемое поле равно указанному значению |
different:field
|
Проверяемое поле должно иметь значение, отличное от field |
digits:value
|
Проверяемое поле должно быть числовым и иметь точную длину value |
dimensions
|
Проверяемый файл должен быть изображением, отвечающим ограничениям размеров, указанным в параметрах правила:
Доступные ограничения: min_width, max_width, min_height, max_height, width, height, ratio.
|
Кастомные правила валидации
В Laravel много правил, которые покрывают почти всё, ключевое слово — почти. Нужно было сделать следующую проверку, поле X обязательно, если поле Y не является пустым. К моему удивлению подобного правила в коробке, не нашлось required_if, required_with работают несколько иначе. Пришлось немного поломать голову над моим required_if_not_empty:field.
В документации предлагаются три варианта создания пользовательских правил — использование объектов Rule, использование замыканий. Два варианта отпали, поскольку невозможно достать значение поля Y, помимо атрибута и значения поля Х, нужны также параметры, в данном случае параметр field. Я создал отдельного поставщика услуг — ValidationServiceProvider, вот код:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;
class ValidationServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('required_if_not_empty', function($attribute, $value, $parameters, $validator) {
$other = array_get($validator->getData(), $parameters[0], null);
if (!empty($other)) {
return $validator->validateRequired($attribute, $value);
}
return true;
});
}
public function register()
{
//
}
}
Получаем все данные валидатора и с помощью хэлпера array_get() достаём значение первого параметра, указанного в правиле field. На тот случай, если такой параметр не найден, говорим функции вернуть null. Далее если параметр поля Y не пуст, проверяем заполнено ли поле Х. Если Y не заполнен, возвращаем true — другими словами поле Х прошло проверку.
Разумеется, надо не забыть добавить нового провайдера в массив $providers в файле config/app.php. Теперь можно использовать правило где угодно.