Jump to main content Jump to doc navigation

Валидация в 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^
email Это корректный адрес электронной почты? 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
email 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 для всех других полей.

Посмотрите также

  1. Хуки
    1. FormIt.Hooks.email
    2. FormIt.Hooks.FormItAutoResponder
    3. FormIt.Hooks.math
    4. FormIt.Hooks.recaptcha
    5. FormIt.Hooks.redirect
    6. FormIt.Hooks.spam
    7. FormIt.Hooks.FormItSaveForm
  2. Валидаторы
  3. FormItRetriever
  4. Руководства и примеры
    1. Пользовательский произвольный хук
    2. Пример простой формы
    3. Обработка выпадающих списков, чекбоксов и радио кнопок
    4. Использование пустого поля для защиты от спама
  5. FormItCountryOptions
  6. FormItStateOptions
  7. $_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

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • Fabian Christen
  • Dannevang Digital
  • Sepia River Studios
  • Chris Fickling
  • CrewMark
  • deJaya
  • Lefthandmedia
  • Murray Wood
  • eydolan
  • Following Sea
  • Anton Tarasov
  • Stéphane Jäggi
  • Raffy
  • Snow Creative
  • A. Moreno
  • Nick Clark
  • JT Skaggs
  • Helen
  • YJ
  • krisznet
  • Richard
  • Yanni

Budget

$301 per month—let's make that $500!

Learn more