Правила валидации форм
На этой странице собраны не все правила валидации, с полным списком можно познакомится тут.
Значение | Действие |
---|---|
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
. Теперь можно использовать правило где угодно.