drupal形式动作

时间:2012-03-30 09:44:26

标签: php forms drupal

我创建了一个表单:

function create_custom_form($form, &$form_state) {
    $form['#action'] = "#";
        ....
}

function create_custom_form_validate($form, &$form_state) {
        ....
}

function create_custom_form_submit($form, &$form_state) {
        ....
        if(..)
           drupal_goto('abc');
        else
           drupal_goto('xxx');
}

当我在开始行动之前提交此表格drupal并且在阅读我的函数之后...我如何绕过行动表格并只读取_submit函数?

1 个答案:

答案 0 :(得分:2)

请勿使用 drupal_goto ,因为可能会有更多“提交”回调执行。 drupal_goto函数会中断这些。

相反,请使用$form_state['redirect'] = ... http://api.drupal.org/api/drupal/includes!form.inc/function/drupal_redirect_form/7

function create_custom_form_submit($form, &$form_state) {
        ....
        if(..)
           $form_state['redirect'] = 'abc';
        else
           $form_state['redirect'] = 'xxx';
}

由于此函数具有相同的表单ID(create_custom_form) - 附加单词“_submit”,因此该函数将自动执行,因此无需在表单中添加任何提交回调。

如果您希望在提交时执行其他功能,那么您应该像Hamza所建议的那样执行,只有您的附加功能将具有不同的名称。 e.g。

function create_custom_form($form, &$form_state) {
  $form['#action'] = "#";
  ....
  // Add any additional callbacks to call before any redirects happen
  $form['#submit'][] = 'create_custom_form_additional_submit_callback';    
  $form['#submit'][] = ...
}

function create_custom_form_additional_submit_callback($form, &$form_state) {
  // Do something before redirect
  ...
}

在上面的例子中:

  • create_custom_form_additional_submit_callback

AND

  • create_custom_form_submit(因为它的名称与附加的'_submit'相同)

将执行,并且只有当它们都完成时才会执行重定向。