Обработчики отправки формы с дополнительными аргументами

Для некоторых требований мне нужно передать дополнительную информацию в обработчик отправки формы. В форме api, определяя пользовательский обработчик отправки как

$additional_args = array();
$form['#submit'][] = 'my_submit_handler'

, я ожидаю отправить обработчик как

function my_submit_handler($form, &$form_state, $additional_args){
7
задан kiamlaluno 14 August 2010 в 11:50
поделиться

2 ответа

Обработчик отправки вызывается fapi drupal, поэтому вы не можете сделать что-то подобное. Вместо этого вы можете добавить то, что вам нужно, либо в $ form , либо в $ form_state . Обычные подходы заключаются в следующем:

  • Добавлено поле в форму, введите значение для хранения значения. Не делайте этого, если у вас есть значение в определении формы.

     $ form ['store'] = массив (
     '#type' => 'значение',
     '#value' => $ значение
    );
    

    Это будет доступно в $ form_state ['values'] ['store'] .

  • Добавьте значение в $ form_state ['storage'] , сделано, если вы изменяете в дескрипторе проверки, который хотите передать обработчику отправки:

     // Проверка.
    $ form_state ['хранилище'] ['значение'] = $ значение;
    
    ...
    
    // Представлять на рассмотрение
    $ значение = $ form_state ['хранилище'] ['значение'];
    // Необходимо сбросить сохраненные значения, когда они больше не используются.
    unset ($ form_state ['хранилище'] ['значение']);
    
14
ответ дан 6 December 2019 в 06:35
поделиться

Как указано в $ form ['# submit'] и $ form ['# validate'] и $ form ['# process'] больше не поддерживают специальные параметры , предлагаемый способ передачи параметров в набор обработчиков отправки, как в показанном коде, заключается в использовании кода, подобного следующему:

$form['#first_paramater'] = $value;
$form['#submit'][] = 'my_submit_handler';

Обработчик извлекает значение как $ form ['# first_paramater'] . Обратите внимание, что вместо #first_paramater в коде может использоваться другая строка, но она должна начинаться с # .

Обычно нет необходимости устанавливать обработчик отправки, как в коде, но в некоторых случаях это необходимо, например, изменить форму, созданную другим модулем, или установить другой обработчик отправки для каждой из кнопок отправки. присутствует в форме.

drupal_retrieve_form () сохраняет параметры, переданные обработчику сборки формы в $ form ['# parameters'] , который содержит:

  • $ form_id
  • $ form_state
  • параметры передано в построитель форм
4
ответ дан 6 December 2019 в 06:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: