Drupal → Как программно удалить ошибку валидации установленную с помощью form_set_error()

22.01.2011

Бывает нужно избавиться от ошибки валидации, которая проходила в другом модуле. Код ниже, удаляет ошибку валидации поля some_field в форме some_form:

/**
 * Реализация hook_form_FORM_ID_alter()
 */
function mymodule_form_some_form_alter(&$form) {
    // вешаем на форму свой валидатор.
    $form['#validate'][] = 'mymodule_some_form_validate';
}

/**
 * Валидация формы some_form
 */
function mymodule_some_form_validate($form, &$form_state) {
    $errors = form_set_error(); // получаем список ошибок
    if (isset($errors['mail'])) {
        // удаляем сообщение об ошибке
        unset($_SESSION['messages']['error'][array_search($errors['mail'], $_SESSION['messages']['error'])]);

        // удаляем саму ошибку
        unset($errors['mail']);

        // сбрасываем список ошибок
        form_set_error(NULL, '', TRUE); 

        // заполняем список по новой
        foreach ($errors as $key => $value) {
            form_set_error($key, $value);
        }

        // удаляем дубли ошибок, добавленных прошлым шагом
        $_SESSION['messages']['error'] = array_values(array_unique($_SESSION['messages']['error']));
    }
}
Написанное актуально для
Drupal 6.x
Похожие записи

Добавить комментарий