Валидация форм в Drupal: отличия между drupal_set_message() и form_set_error()

Отличия (точнее 1 из отличий) между функциями API Drupal 7 под названиями drupal_set_message() и form_set_error() я продемонстрирую читателям на простом наглядном примере программного кода примитивной абстрактной формы.

В первом случае будем использовать form_set_error():

<?php
function RedBookCms_simpleFrm($form, &$form_state) {

    $form['field_example'] = array(
        '#type' => 'textfield',
        '#title' => 'Напишите слово: Drupal',
    ); 

    // А это поле так, для "массовки":
    $form['field_addition'] = array(
        '#type' => 'textfield',
        '#title' => 'Напишите ещё что-нибудь:',
    );

    $form['actions'] = array('#type' => 'actions');
    $form['actions']['process_the_data'] = array(
        '#type' => 'submit',
        '#value' => 'Обработать данные!',
    );

    $form['#validate'][] = 'RedBookCms_simpleFrm_validate'; 

    return $form;
}

function RedBookCms_simpleFrm_validate($form, &$form_state) {
    if (strcmp($form_state['values']['field_example'], "Drupal") != 0)
        form_set_error('field_example', 'Вы не написали слово "Drupal"!');   
}

function RedBookCms_simpleFrm_submit($form, &$form_state) {
    drupal_set_message('Получено: ' . $form_state['values']['field_example']);
}
?>

Результат будет вот таким:

Drupal и проверка форм с form_set_error()

Во втором случае будем использовать drupal_set_message() в функции валидации:

function RedBookCms_simpleFrm_validate($form, &$form_state) {
    if (strcmp($form_state['values']['field_example'], "Drupal") != 0)
        drupal_set_message('Вы не написали слово "Drupal"!', 'error');   
}

Результат будет вот таким:

Drupal и проверка форм с form_set_message()

В form_set_error() в качестве первого входного параметра указываем наименование элемента формы, заданного в функции-описании последней.

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

Опубликовано 13-11-2013 в 12:27


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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Свежие комментарии

  • Иван: к записи Привет всем, доброго времени суток! Я излазил весь »
  • Александер: к записи Потом пригляделся, вроде Вы не это имели в виду и »
  • Александер: к записи У Вас не русифицируется, потому что не везде включ »
  • Администратор: к записи Это надо использовать функции вашей CMS. »
  • Alex: к записи Ребят, а подскажите пожалуйста, как реализовать с »
  • Владимир: к записи А как теперь будет выглядеть ссылка для перехода н »
  • Администратор: к записи Не знаю. »

Статистика спама

Последние твиты