! Начиная с версии FormIt 1.4.0 валидация изменилась. Старый метод проведения проверки на входе имен все еще доступен для всех версий до FormIt 2.0.0, в которой его исключают. Рекомендуется новый способ – с использованием свойства &validate.
Валидация может быть легко пройдена путем добавления полей для проверки в свойство &validate запроса сниппета. Например, чтобы сделать поле имени пользователя обязательным, можно проделать следующую операцию:
[[!FormIt? &validate=`username:required`]]
Валидаторы также могут быть «chained» (сцепленными), или выполняться последовательно. Следующий пример показывает, как сначала проверить, является ли поле обязательным, а далее удалитьт все теги из поста:
[[!FormIt? &validate=`text:required:stripTags`
Множественные поля и валидаторы разбиваются (split) запятыми:
[[!FormIt? &validate=`date:required:isDate=^%m/%d/%Y^,
name:required:testFormItValidator,
email:email:required,
colors:required,
subject:required,
username:required:islowercase,
message:stripTags,
numbers:required`]]
FormIt позволяет разбить валидаторы на большое количество строк, если Вы хотите.
Запомните: не используйте обратные кавычки (`) внутри запроса валидации. Замените на знак ^:
[[!FormIt? &validate=`date:required:isDate=^%m/%d/%Y^`]]
Это позволит отрегулировать запрос и наладить его правильное выполнение.
Общее сообщение об ошибке для валидаторов полезно в том случае, если ошибки не показываются, но проверка не удается. Используется со следующим плейсхолдером:
[[!+fi.validation_error_message]]
Здесь содержится сообщение об ошибке проверки, которое может быть задано с помощью свойства &validationErrorMessage с использованием в значении свойства, которое заменит все ошибки поля.
Кроме того также имеется 1/0 плейсхолдер:
[[!+fi.validation_error]]<br /><br /><br />
Встроенные валидаторы
Имя |
Функция |
Параметр |
Пример |
blank |
Поле чистое? |
|
nospam:blank |
required |
Поле не пустое? |
|
username:required |
password_confirm |
Поле соответствует значению или другому полю? |
Имя поля пароля |
password2:password_confirm=^password^ |
|
Email-адрес валидный? |
|
emailaddr:emai |
minLength |
Поле ≥ Х символов? |
Минимальная длина |
password:minLength=^6^ |
maxLength |
Поле ≤, чем Х символов? |
Максимальная длина |
password:maxLength=^12^ |
minValue |
Поле ≥ Х? |
Минимальное значение |
donation:minValue=^1^ |
maxValue |
Поле ≤ Х? |
Максимальное значение |
cost:maxValue=^1200^ |
contains |
Поле содержит последовательность Х? |
Последователь-ность Х |
title:contains=^Hello^ |
strip |
Разбитие определенной после-довательности из поля |
Последователь-ность для разбивки |
message:strip=^badword^ |
stripTags |
Разбитие всех тегов в поле. Учтите, это только по умолчанию. |
Опционный список разрешенных тегов. |
message:stripTags |
allowTags |
Разрешить теги в поле. |
|
content:allowTags |
isNumber |
Поле – это числовое значение? |
|
cost:isNumber |
isDate |
Поле – это дата? |
Опционный формат даты. |
startDate:isDate=^%Y-%m-%d^ |
Настраиваемые валидаторы (Custom Validators)
Валидаторы могут быть также настраиваемыми сниппетами. Вы можете сделать это, просто указав имя сниппета в свойстве customValidators:
[[!FormIt? &customValidators=`isBigEnough`]]
! В версии FormIt 1.2.0 все настраиваемые валидаторы должны быть указаны в свойстве customValidators, иначе они не запустятся.
Далее, когда валидатор в свойстве &validate:
[[!FormIt? &validate=`cost:isBigEnough`]]
Теперь в Вашем сниппете – «isBigEnough»:
<?php
$value = (float)$value;
$success = $value > 1000;
if (!$success) {
// Обратите внимание, как мы можем здесь добавить ошибку в поле.
$validator->addError($key,'Not big enough!');
}
return $success;
?>
Валидатор отправит следующие свойства сниппету, в массив $scriptProperties:
Имя |
Функция |
key |
Ключ проверенного поля |
value |
Значение поля, которое было отсрочено (POSTed) |
param |
Если параметр был определен для валидатора, это он |
type |
Имя валидатора (или сниппета) |
validator |
Ссылка на экземпляр класса fiValidator. |
Настраиваемые сообщения об ошибках
В версии FormIt 2.0-pl, Вы можете перезаписать сообщения об ошибках, которые выводятся валидаторами, если отправите соответствующее свойство:
Валидатор |
Свойство |
blank |
vTextBlank |
required |
vTextRequired |
password_confirm |
vTextPasswordConfirm |
|
vTextEmailInvalid, vTextEmailInvalidDomain |
minLength |
vTextMinLength |
maxLength |
vTextMaxLength |
minValue |
vTextMinValue |
maxValue |
vTextMaxValue |
contains |
vTextContains |
isNumber |
vTextIsNumber |
isDate |
vTextIsDate |
regexp |
vTextRegexp |
Вы также можете определить сообщение для каждого поля с помощью задавания ключевого поля в префиксе свойства. Например, чтобы перезаписать «required» (запрашиваемый, обязательный) сообщение валидатора, просто добавьте в запрос FormIt:
[[!FormIt?
&vTextRequired=`Please enter a value for this field.`
&subject.vTextRequired=`Please enter a subject.`
]]
Используйте &subject.vTextRequiredдля поля темы, а для всех других полей – сообщение vTextRequired.