Валидаторы
Последнее обновление 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
$306 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
$306 per month—let's make that $500!
Learn more