7

对于某些要求,我需要将其他信息传递给表单提交处理程序。在表单 api 中,将自定义提交处理程序定义为

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

我希望将处理程序提交为

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

3 回答 3

14

提交处理程序由 drupal fapi 调用,所以你不能做这样的事情。相反,您可以做的是将您需要的内容添加到.$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']);
    
于 2010-08-13T07:45:10.077 回答
9

Drupal 7:自定义参数自动传播 $form_state['build_info']['args'] 这在http://api.drupal.org/api/drupal/includes!form.inc/function/drupal_get_form/7中有说明

前任:

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

然后在

hook_form_submit($form, &$form_state) {

... //$form_state['build_info']['args']是一个数组,在索引 0 处包含参数的值$myAdditionnalArg ...

于 2012-10-04T14:34:46.007 回答
4

$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
  • 传递给表单构建器的参数
于 2010-08-14T12:18:43.913 回答