Обработчики отправки формы с дополнительными аргументами - PullRequest
7 голосов
/ 13 августа 2010

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

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

Я ожидаю представить обработчик как

function my_submit_handler($form, &$form_state, $additional_args){

Ответы [ 3 ]

14 голосов
/ 13 августа 2010

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

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

    $form['store'] = array(
      '#type' => 'value',
      '#value' => $value
    );
    

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

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

    // Validation.
    $form_state['storage']['value'] = $value;
    
    ...
    
    // Submit
    $value = $form_state['storage']['value'];
    // Need to unset stored values when not used anymore.
    unset($form_state['storage']['value']);
    
9 голосов
/ 04 октября 2012

Drupal 7: Пользовательские аргументы автоматически распространяются Это сказано в http://api.drupal.org/api/drupal/includes!form.inc/function/drupal_get_form/7

Ex:

hook_form($form, &$form_state, $myAdditionnalArg) {...}

Тогда в

hook_form_submit($form, &$form_state) {

... //$form_state['build_info']['args'] - массив, содержащий в индексе 0 значение аргумента $myAdditionnalArg ...

4 голосов
/ 14 августа 2010

Как сообщается в $ 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
  • параметры передаются в конструктор форм
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...