Проверка ввода

Для проверки ввода и получения сообщений об ошибках разработан класс validator.

Пример использования

Рассмотрим пример регистрации пользователя. Необходимо проверить что:

  1. Пользователь заполнил поле E-mail, пароль и подтверждение пароля.
  2. Введенный E-mail является действительно E-mail.
  3. Введенный E-mail не занят в нашей базе данных.
  4. Длина пароля должна быть более 6 символов и менее 255.
  5. Введенный пароль совпадает с подтверждением пароля.

Даа, получается очень много проверок нужно сделать перед регистрацией пользователя. Но при помощи класса validator, все эти проверки можно уместить в 6 строк кода. Вот смотрите:

$hash[
  $.email[required|email|unique:users]
  $.password[required|min:6|max:255]
  $.password_confirmation[same:password]
]
$hash_result[^validator:make[$hash]]

$.email - это название поля.

required - это условие что поле обязательно для заполнения.

email - это условие что поле должно быть в формате E-mail.

И т.д. В конце вызывается метод make, который возвращает hash следующего вида:

$hash[
  $.status[error] - результат проверки success или error
  $.message[
    $.field1[Поле "field1" обязательно для заполнения.]
    $.field2[Поле "field2" имеет неправильный формат.]
  ]
]

Если ваша форма использует класс Ajax форму, то вы можете сразу информировать пользователя о том, что поля неправильно заполнены. Для этого необходимо в формате JSON вернуть hash $hash_result. Вот полный пример:

$hash[
  $.email[required|email|unique:users]
  $.password[required|min:6|max:255]
  $.password_confirmation[same:password]
]
$hash_result[^validator:make[$hash]]

^if($hash_result.status ne 'error'){
  ...
  $hash_result.url[^auth:get_url_login[]]
}

$result[^json:string[$hash_result]]

Методы класса

@make[hash;extra_names]

Валидация ввода. $extra_names - дополнительный hash с красивыми именами

^validator:make[$.square[required];$.square[Площадь]]
@beatiful[key]

Получение красивого названия поля

^validator:beatiful[square]
@is_email[email]

Проверка формата E-mail. Возвращает true или false.

^if(^validator:is_email[test@gmail.com]){
  Правильный формат
}

Доступные правила проверки

between:min,max
Поле должно быть числом в диапазоне от min до max.
email
Поле должно быть корректным адресом E-mail.
exist:table
Поле должно существовать в заданной таблице table.
max:value
Значение поля должно быть меньше или равно value.
min:value
Значение поля должно быть более или равно value.
required
Проверяемое поле должно иметь непустое значение.
same:field
Поле должно иметь то же значение, что и поле field.
unique:table,exceptId
Значение поля должно быть уникальным в заданной таблице table. Если задан exceptId, то из проверки исключается данная запись (Обычно это нужно при редактировании записи, чтобы исключить самого себя из проверки).