使用其他参数表单提交处理程序

时间:2010-08-13 07:11:38

标签: drupal drupal-6 drupal-modules drupal-fapi

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

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

我希望将处理程序提交为

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

3 个答案:

答案 0 :(得分: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']);
    

答案 1 :(得分:9)

Drupal 7:自定义参数自动传播troug $ 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的值 ...

答案 2 :(得分:4)

正如$form['#submit'] and $form['#validate'] and $form['#process'] no longer support custom parameters中所报告的,将参数传递给提交处理程序集的建议方法如下所示:使用类似于以下内容的代码:

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

处理程序会将值检索为$form['#first_paramater']。 要注意,代码可以使用不同的字符串代替#first_paramater,但必须以#开头。

通常没有必要像代码那样设置提交处理程序,但是在某些情况下有必要,比如改变由另一个模块创建的表单,或者为每个提交按钮设置不同的提交处理程序以一种形式出现。

drupal_retrieve_form()保存传递给$form['#parameters']中的表单构建处理程序的参数,其中包含:

  • $form_id
  • $form_state
  • 传递给表单构建器的参数