Как работают правила проверки в laravel


В laravel для проверки некоторых вводимых пользователем данных мы можем использовать класс Validator.

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

array( 'email' => 'required|email|unique:users,email' )

В котором говорится, что требуется электронная почта, электронная почта должна быть в формате электронной почты и не должна быть зарегистрирована в таблице users ранее. (должно быть уникальным)

Итак, как это работает?

Использует ли он короткое замыкание ? Если мы пройдем шаг за шагом

  • он проверяет, установлен ли ввод по required
    если пройдено, переходит к следующему правилу
  • затем проверяет, находится ли оно в формате электронной почты
    если пройдено, переходит к следующему правилу
  • проверяет, не существует ли в таблице users

Я спросил кое-кого, и он сказал, что это все проверяет, проходит по всем правилам.
Если правило required не передано, нет причин проверять, есть ли ввод в формате электронной почты.
И если это не в формате электронной почты, нет необходимости проверять базу данных.

Кто-нибудь знает, как это работает?

Author: Pars, 2013-12-20

2 answers

Это зависит от правила. На практике Laravel прекратит обработку других правил, если атрибут required не удался. Однако, если required пройдет, он продолжит проверку других правил.

Это означает, что вы можете получить несколько ошибок проверки в одном и том же поле.

 4
Author: James Binford, 2013-12-20 00:40:54

Я не смог найти подробностей для Laravel 4, но документация Laravel 5.4 подразумевает, что все правила проверки выполняются в порядке без оценки короткого замыкания.

В Laravel 5 вы можете принудительно выполнить оценку короткого замыкания, добавив префикс "залог" к правилу проверки.

$this->validate($request, [
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
]);

Я пришел сюда в поисках того, почему короткое замыкание будет отключено по умолчанию, я думаю, что Джеймс прав в своих рассуждениях о том, что оно предназначено для получения нескольких ошибок проверки в одном и том же поле.

 2
Author: Ron, 2017-03-26 07:18:09