Полный цикл в digital

Кастомный валидатор полей для модуля веб-формы

Валидатор сделан для защиты от спама без включения капчи, для этого расскажу как написать свой валидатор.

Защищаться будем по схеме: добавляем в форму невидимое поле, если поле заполнено — к нам пришёл бот.

Предположим, форма у вас создана в модуле веб-форм. Заведём ещё одно служебное поле, с типом text, поля типа hidden боты иногда игнорируют и не заполняют. Название выбираем обычное, например user или name, это важно!

Нам нужно проверять поле на пустоту, по умолчание доступны валидаторы среди которых нет нужного:

  1. [number_ext] Число в пределах
  2. [text_len] Длина строки
  3. [number] Целое число
  4. [INN] Проверка ИНН

Документация по написанию своих валидаторов тут. Там всё просто: пишем PHP-класс с нужными методами и подвешиваем его на нужное событие.

Получился класс валидатора form_validator_string_empty.php:

/local/php_interface/form_validator_string_empty.php<?php
namespace Hmarketing\Form\Validation;
class Stringempty
{
    static function getDescription()
    {
        return array(
            // идентификатор
            'NAME' => 'empty_string',
            // наименование
            'DESCRIPTION' => 'Пустая строка',
            // типы полей 
            'TYPES' => array('text'),
            // метод, возвращающий массив настроек
            'SETTINGS' => array(__CLASS__, 'getSettings'),
            // метод, конвертирующий массив настроек в строку
            'CONVERT_TO_DB' => array(__CLASS__, 'toDB'),
            // метод, конвертирующий строку настроек в массив
            'CONVERT_FROM_DB' => array(__CLASS__, 'fromDB'),
            // валидатор
            'HANDLER' => array(__CLASS__, 'doValidate')
        );
    }
    static function getSettings()
    {
        return array();
    }
    static function toDB($arParams)
    {
        // возвращаем сериализованную строку
        return serialize($arParams);
    }
    static function fromDB($strParams)
    {
        // никаких преобразований не требуется, просто вернем десериализованный массив
        return unserialize($strParams);
    }
    static function doValidate($arParams, $arQuestion, $arAnswers, $arValues)
    {
        global $APPLICATION;
        foreach ($arValues as $value) {
            // проверяем на пустоту, или любую другую логику
            if (strlen(trim($value)) > 0) {
                // вернем ошибку
                $APPLICATION->ThrowException('Ошибка заполнения полей формы');
                return false;
            }
        }
        // все значения прошли валидацию, вернем true
        return true;
    }
}

Валидатор нужно подключить в файле int.php:

/local/php_interface/init.php//  класс кратко и долгосрочной регистрации обработчиков событий
$eventManager = \Bitrix\Main\EventManager::getInstance();
// регистрируем класс в системе
Bitrix\Main\Loader::registerAutoloadClasses(
null,
array(
    // ключ - имя класса с простанством имен, значение - путь относительно корня сайта к файлу
    "Hmarketing\Form\Validation\Stringempty" => "/local/php_interface/form_validator_string_empty.php",
)
);
// добавляем новый валидатор
$eventManager->addEventHandler(
'form',
'onFormValidatorBuildList',
array('Hmarketing\Form\Validation\Stringempty', 'getDescription')
);
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг