Валидация форм в 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>











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

  • krasnov8953: к записи Не работает как мне кажется строчка $newTvId = $ »
  • Dimanski: к записи ничего не понимаю. Ставлю ModX на хостинг r01.ru »
  • Дмитрий: к записи Спасибо! Очень выручили. С битриксом беда, а прав »
  • леонид: к записи как сделать что были в ряд? у меня получается по о »
  • Администратор: к записи Статический IP. »
  • Steel: к записи Администратор, вы данную проблему решили подключен »
  • Дмитрий: к записи Хотел узнать как прикрутить данное окно (http://re »

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