Полный цикл в digital

Правила валидации форм

На этой странице собраны не все правила валидации, с полным списком можно познакомится тут.

Значение Действие
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:

'start_date' => 'required|date|after:tomorrow'

Вместо передачи строки даты, которая будет проанализирована с помощью strtotime, вы можете указать другое поле для сравнения с датой:

'finish_date' => 'required|date|after:start_date'
after_or_equal:date Проверяемое поле должно иметь значение после указанной даты или равное ей. Для получения дополнительной информации см. правило after
alpha Проверяемое поле должно состоять полностью из букв
alpha_dash Проверяемое поле может содержать буквенно-цифровые символы, а также дефисы и подчеркивания
alpha_num Проверяемое поле должно состоять полностью из буквенно-цифровых символов
array Проверяемое поле должно быть массивом PHP. Когда для правила array предоставляются дополнительные значения, каждый ключ во входном массиве должен присутствовать в списке значений, предоставленных правилу. В следующем примере ключ admin во входном массиве недействителен, поскольку он не содержится в списке значений, предоставленных правилу array:
use Illuminate\Support\Facades\Validator;
$input = [
'user' => [
'name' => 'Taylor Otwell',
'username' => 'taylorotwell',
'admin' => true,
],
];
Validator::make($input, [
'user' => 'array:username,locale',
]);
В общем, вы всегда должны указывать ключи массива, которые могут присутствовать в вашем массиве. В противном случае методы валидатора validate и validated вернут все проверенные данные, включая массив и все его ключи, даже если эти ключи не были проверены другими правилами проверки вложенных массивов. Если вы хотите, вы можете указать валидатору Laravel никогда не включать непроверенные ключи массива в «проверенные» данные, которые он возвращает, даже если вы используете правило array без указания списка разрешенных ключей. Для этого вы можете вызвать метод валидатора excludeUnvalidatedArrayKeys в методе boot класса AppServiceProvider вашего приложения. После этого валидатор будет включать ключи массива в «проверенные» данные, которые он возвращает, только если эти ключи были специально проверены с помощью правил вложенных массивов:
use Illuminate\Support\Facades\Validator;
/**
* Register any application services.
*
* @return void
*/
public function boot()
{
Validator::excludeUnvalidatedArrayKeys();
}
bail Остановить дальнейшее применение правил валидации атрибута после первой неуспешной проверки. В отличие от правила bail, которое прекращает дальнейшую валидацию только конкретного поля, метод stopOnFirstFailure сообщит валидатору, что он должен прекратить дальнейшую валидацию всех атрибутов при возникновении первой ошибке:
if ($validator->stopOnFirstFailure()->fails()) {
// ...
}
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 Проверяемое поле должно соответствовать паролю аутентифицированного пользователя. Вы можете указать охранника аутентификации используя первый параметр правила:
'password' => 'current_password:api'
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 Проверяемый файл должен быть изображением, отвечающим ограничениям размеров, указанным в параметрах правила:
'avatar' => 'dimensions:min_width=100,min_height=200'
Доступные ограничения: 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. Теперь можно использовать правило где угодно.

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг