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

Sho*_*waz 7 drupal drupal-6 drupal-fapi drupal-modules

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

$additional_args = array();
$form['#submit'][] = 'my_submit_handler'
Run Code Online (Sandbox Code Playgroud)

我希望提交处理程序为

function my_submit_handler($form, &$form_state, $additional_args){
Run Code Online (Sandbox Code Playgroud)

goo*_*orp 14

提交处理程序由drupal fapi调用,所以你不能做那样的事情.相反,你可以做的是将你需要的东西添加到$form或者$form_state.通常的方法是:

  • 在表单中添加了一个字段,键入值以存储该值.如果表单定义中包含值,请不要这样做.

    $form['store'] = array(
      '#type' => 'value',
      '#value' => $value
    );
    
    Run Code Online (Sandbox Code Playgroud)

    这将是$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']);
    
    Run Code Online (Sandbox Code Playgroud)


小智 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) {...}
Run Code Online (Sandbox Code Playgroud)

然后进去

hook_form_submit($form, &$form_state) {
Run Code Online (Sandbox Code Playgroud)

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