Не получается накинуть validate и submit на самописную форму

Главные вкладки

Аватар пользователя xakd xakd 11 января 2017 в 23:50

Никак не пойму, в чем проблема. Есть форма из нескольких полей,

function jfilter_form($form, &$form_state)
{    
 $form['quiz'] = array(
        '#title' => t('Name of quiz'),
        '#type' => 'select',
        '#options' =>    array ( 20 => 20, 50 => 50, 100 =>  100),
        '#required' => true,
    );    
    $form['passed'] = array(
        '#title' => t('Passed'),
        '#type' => 'select',
        '#options' =>  array ( 1 => t('Passed'), 2 => t('Not passed')),
    );
           
    $form['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Submit'),
    );

 
    $form['#submit'][] = 'jfilter_form_submit'; // это все попытки накинуть обработчики
    $form['#validate'][] = 'jfilter_form_validate';
    $form['#validate'] = 'jfilter_form_validate';
    $form['actions']['submit']['#submit'][] = 'jfilter_form_submit';

    $form['#method'] = 'get' ;
    $form['#redirect'] = false;
    $form['#pre_render'][] = 'jfilter_form_pre_render';

    return $form;
}

Она работает - но к ней почему то не выходит добавить ни validate, ни submit - просто не реагирует.
Ни на стандартные имена -
jfilter_form_validate($form, &$form_state)  jfilter_form_submit($form, &$form_state) .
Ни на объявление в форме явно
 $form['#validate'][] = 'jfilter_form_validate';
 $form['#submit'][] =  ' jfilter_form_submit';

Реакции ноль, в функции даже не заходит, одно из полей объявлено как required - тоже в никуда.
В чем может быть проблема?

Комментарии

Аватар пользователя xakd xakd 18 января 2017 в 9:11

Это когда   $form['#method'] = 'get' ; - написано же в коде. В итоге параметры передаются в адресной строке, а не через $_POST и в итоге валидация и субмит наглухо отказываются обрабатываться отдельными функциями. Попробуйте сами

Аватар пользователя dgastudio dgastudio 20 января 2017 в 9:25

xakd, я не буду говорить утверждая, но, если мне память не изменяет, я как то бодался с этим.

проблема в том что через пост, идет внутрення обработка друпал (vlidation, submit)

при get, идет просто редирект, друпал не может обработать эти данные.

Аватар пользователя xakd xakd 20 января 2017 в 14:01

Да, что-то типа видимо. В итоге нужно ручками обрабатывать субмит. Я в итоге отказался от GET(схватился фактически по ошибке за него) и сделал все через стандартно, через POST

Аватар пользователя xakd xakd 20 января 2017 в 14:02

Вон код сверху, что ещё надо. Добавьте в модуль форму и проверьте, сабмит и validate вы не прицепите к ним никак

Аватар пользователя mbaev mbaev 20 января 2017 в 19:21

Каждый день это делаю Wink Сразу не додумался, что вы реализовали хук hook_form(), поэтому решил, что у Вас там есть альтеры.
Измените имя функции с формой.
Вам сюда: https://api.drupal.org/api/drupal/modules!node!node.api.php/function/hoo...

Аватар пользователя mbaev mbaev 30 января 2017 в 18:22

xakd wrote:
Не понял, что вы предлагаете изменить?

Измените название функции, которая возвращает форму jfilter_form на что-то другое. Например, jfilter_admin_form.