Свои правила валидации из функции

    Как сделать свои правила валидации из функции (сниппета).

    Код снипета checkUrls с функцией checkUrls которая проверяет наличие ссылок в поле, и если они есть, то возвращает ошибку проверки (валидации):

    <?php
    function checkUrls($fl,$value) {
        $pattern = '~[a-z]+://\S+~';
        if($num_found = preg_match_all($pattern, $value, $out) > 0) {
        // Ошибка, ссылки есть
            return false;
        }
    
        // Всё хорошо, ссылок нет
        return true;
    }

    Перед вызовом формы FormLister-а необходимо вызвать сам сниппет:

    [!checkUrls!]
    [!FormLister?...

    Затем в FormLister, в правилах валидации для поля message задать правила валидации:

    ...
    "message":{
        "required":"Обязательно введите сообщение",
        "custom":{
            "function":"checkUrls",
            "message":"Ссылки в тексте запрещены"
        }
    },
    ...

    Начиная с версии 1.18.0 можно использовать сниппеты в правилах валидации:

    ...
    "message":{
        "required":"Обязательно введите сообщение",
        "custom":{
            "snippet":"checkUrls",
            "message":"Ссылки в тексте запрещены"
        }
    },
    ...

    Соответственно сниппет будет выглядеть:

    $pattern = '~[a-z]+://\S+~';
    if($num_found = preg_match_all($pattern, $value, $out) > 0) {
        // Ошибка, ссылки есть
        return false;
        /*
        Можно не задавать в описании правила ключ "message":
        return "Ссылки в тексте запрещены";
        */
    }
    
    // Всё хорошо, ссылок нет
    return true;

    В сниппеты для валидации передаются параметры:

    • FormLister - объект контроллера;
    • value - проверяемое значение.