Валидаторы
Последнее обновление Mar 24th, 2021 | История страницы | Улучшить эту страницу | Сообщить о проблеме
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$280 per month—let's make that $500!
Learn moreВалидация в FormIt¶
FormIt 3.0 представляет обновление методов шифрования, используемых для шифрования отправленных форм. До версии 3.0 использовался mcrypt, который в версии 3.0 заменен на openssl из-за того, что mcrypt устарел с версии PHP 7.2. FormIt 3.0 поставляется со страницей миграции, доступной из Менеджера.
Начиная с FormIt 2.2.9, ко всем полям автоматически применяется html_entities. Чтобы разрешить сохранение HTML-тегов, вам нужно будет использовать валидатор allowSpecialChars для каждого поля, который должен сохранять необработанные html-теги.
Начиная с FormIt 1.1.4, ко всем полям будут автоматически применяться stripTags. Чтобы разрешить сохранение HTML-тегов, вам нужно будет использовать валидатор allowTags для каждого поля, определяя, какие теги разрешены.
Валидацию можно просто выполнить, добавив поля для проверки в свойство &validate при вызове Сниппета. Например, чтобы сделать поле имени пользователя обязательным, вы можете сделать так:
[[!FormIt? &validate=`username:required`]]
Валидаторы также могут быть «связаны» или выполняться последовательно. В следующем примере сначала проверяется, передано ли значение поля text, а затем удаляются все теги из сообщения:
[[!FormIt? &validate=`text:required:stripTags`
Несколько полей и валидаторов разделяются запятыми:
[[!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 и используя [[+errors]] в значении свойства, которое будет заменено всеми ошибками поля.
Также существует "Да/нет" плейсхолдер:
[[!+fi.validation_error]]
Встроенные валидаторы¶
| Имя | Функция | Параметр | Пример |
|---|---|---|---|
| blank | Поле пустое? | nospam:blank | |
| required | Поле не пустое? | username:required | |
| password_confirm | Соответствует ли поле значению другого поля? | Имя поля пароля | password2:password_confirm=^password^ |
| Это корректный адрес электронной почты? | emailaddr:email | ||
| minLength | Длина поля не менее X символов? | Минимальная длина | password:minLength=^6^ |
| maxLength | Длина поля не превышает X символов? | Максимальная длина | password:maxLength=^12^ |
| minValue | Значение поля не меньше X? | Минимальное значение | donation:minValue=^1^ |
| maxValue | Значение поля не больше X? | Максимальное значение | cost:maxValue=^1200^ |
| contains | Содержит ли поле строку X? | Строка X. | title:contains=^Hello^ |
| strip | Удалите определенную строку из поля. | Строка, которую нужно удалить | message:strip=^badword^ |
| stripTags | Удалите все HTML-теги из поля. Обратите внимание, что по умолчанию это включено. | Необязательный список разрешенных тегов | message:stripTags |
| allowTags | Не удаляйте HTML-теги в поле. Обратите внимание, что по умолчанию это отключено. | content:allowTags | |
| isNumber | Поле имеет числовое значение? | cost:isNumber | |
| allowSpecialChars | Не заменяйте специальные символы HTML их сущностями. По умолчанию это отключено. | message:allowSpecialChars | |
| isDate | Поле - это дата? | Необязательный формат для форматирования даты | startDate:isDate=^%Y-%m-%d^ |
| regexp | Соответствует ли поле ожидаемому формату? | Действительное регулярное выражение для сравнения | secretPin:regexp=^/[0-9]{4}/^ |
Пользовательские валидаторы¶
Валидаторами также могут быть любые пользовательские сниппеты. Вы можете сделать это, просто указав имя сниппета в свойстве 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,'Маловато будет!');
}
return $success;
Валидатор отправит в сниппет следующие свойства в массиве $scriptProperties:
| Имя | Функция |
|---|---|
| key | Ключ проверяемого поля. |
| value | Значение поля, которое было передано в массиве $_POST. |
| 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=`Пожалуйста, укажите значение для этого поля.`
&subject.vTextRequired=`Пожалуйста введите тему.`
]]
Это будет использовать &subject.vTextRequired для поля темы, а затем вернуться к сообщению &vTextRequired для всех других полей.
Посмотрите также¶
- Хуки
- Валидаторы
- FormItRetriever
- Руководства и примеры
- FormItCountryOptions
- FormItStateOptions
- $_POST
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$280 per month—let's make that $500!
Learn more










