Drupal钩形改变不重定向

Drupal钩形改变不重定向,drupal,redirect,submit,Drupal,Redirect,Submit,我正在使用hook form_alter并设置$form['redirect']='dir1/dir2/mypage'。但是表格拒绝去那里 表单似乎在其他情况下工作,但会继续发送回原始表单,而不是重定向 我正在更改的表单来自根用户模块。 请帮助尝试满足过期的死线!!: 提前谢谢。试试看 $form_state['redirect'] = "dir1/dir2/mypage"; 如果您的提交只有一个处理程序,您可以使用 函数\u mymodule\u school\u registratio

我正在使用hook form_alter并设置$form['redirect']='dir1/dir2/mypage'。但是表格拒绝去那里

表单似乎在其他情况下工作,但会继续发送回原始表单,而不是重定向

我正在更改的表单来自根用户模块。

请帮助尝试满足过期的死线!!:

提前谢谢。

试试看

$form_state['redirect'] = "dir1/dir2/mypage";

如果您的提交只有一个处理程序,您可以使用

函数\u mymodule\u school\u registration\u submit..args。。。{ ... drupal_goto'something'; }

我认为功能是一样的

我倾向于避免重定向,所以一旦您达到了截止日期,我就会重构您的代码。您通常可以不进行重定向。您的实现不正确:

如果没有参数,您不会修改任何内容,因此不会注册任何更改, $form['submit']和$form['validate']已经是包含内容的数组,因此不应使用数组重置它们, 未设置$form['action']会导致表单在提交时不执行任何操作, 在hook\u form\u alter中设置$form['redirect']将被其他处理程序覆盖,并且 您的hook\u form\u alter实现将影响并破坏每个表单。 更多信息:

相反,请尝试以下操作:

function mymodule_form_alter(&$form, $form_state, $form_id) {
  if ($form_id === 'form_id_goes_here') {
    // Code here

    $form['account']['pass'] = array(
      '#type' => 'password_confirm', 
      '#size' => 25, 
      '#description' => t(''), 
      '#required' => TRUE
    );

    unset($form['Birthdate']['profile_birthdate']);
    unset($form['Birthdate']);

    $form['#validate'][] = '_mymodule_school_registration_validate';
    $form['#submit'][] = '_mymodule_school_registration_submit';
  }
}

function _mymodule_school_registration_submit($form, &$form_state) {
  // Code here

  $form_state['redirect'] = 'dir1/dir2/mypage';
}

谢谢,不过我试过了。我也尝试过:取消设置$form_state['storage'];根据John Vandyk的Pro Drupal Development的第250页,从不在提交处理程序中使用Drupal_goto。您的模块将不知道还有什么实现了提交处理程序,处理程序/钩子系统的要点是优雅地适应其他实现。是的,同意,标记。我最终通过变量_set/get和验证函数中的一些逻辑解决了这个问题。非常感谢您的宝贵意见。
function mymodule_form_alter(&$form, $form_state, $form_id) {
  if ($form_id === 'form_id_goes_here') {
    // Code here

    $form['account']['pass'] = array(
      '#type' => 'password_confirm', 
      '#size' => 25, 
      '#description' => t(''), 
      '#required' => TRUE
    );

    unset($form['Birthdate']['profile_birthdate']);
    unset($form['Birthdate']);

    $form['#validate'][] = '_mymodule_school_registration_validate';
    $form['#submit'][] = '_mymodule_school_registration_submit';
  }
}

function _mymodule_school_registration_submit($form, &$form_state) {
  // Code here

  $form_state['redirect'] = 'dir1/dir2/mypage';
}