xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

Бывает нужно избавиться от ошибки валидации, которая проходила в другом модуле. Код ниже, удаляет ошибку валидации поля 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
Похожие записи

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании