Drupal 7 自定义提交处理程序上的重定向

Drupal 7 自定义提交处理程序上的重定向,drupal-7,form-submit,hook-form-alter,Drupal 7,Form Submit,Hook Form Alter,所以基本上这是我在这个问题上的第二天 我有我的模块send\u xml.module function send_xml_form_user_register_form_alter(&$form, &$form_state) { $form['#submit'][] = 'send_xml_submit_function'; } function send_xml_submit_function($form, &$form_state){ $email

所以基本上这是我在这个问题上的第二天

我有我的模块
send\u xml.module

function send_xml_form_user_register_form_alter(&$form, &$form_state) {
    $form['#submit'][] = 'send_xml_submit_function';
}

function send_xml_submit_function($form, &$form_state){
    $email = $form_state['values']['mail'];
    $password = $form_state['values']['pass'];
    $form_state['redirect'] = array(
        'mylink', array(
             'query' => array(
                  'email' => $email,
                  'password' => $password,
              ),
             ),
            );

但是在
mylink
中的过程之后,它不会重定向,它只是刷新页面。

使用
hook\u form\u alter
如下所示:

function send_xml_form_alter(&$form, &$form_state, $form_id) {
    switch ($form_id) {
        case 'user_register_form':
            $form['#submit'] = array('send_xml_submit_function');
            break;

        default:
            # code...
            break;
    }
}

function send_xml_submit_function($form, &$form_state){
    // call default submit -- this is default submit action for register form
    user_register_submit($form, $form_state);
    // if you use profile2 to create fields in register form then call this function too
    profile2_form_submit_handler($form, $form_state);


    $email = $form_state['values']['mail'];
    $password = $form_state['values']['pass'];
    $form_state['redirect'] = array(
      'mylink', array(
         'query' => array(
              'email' => $email,
              'password' => $password,
          ),
         ),
        );
}
几周前我也遇到过同样的问题,这就是我解决问题的方法,实际上我不清楚为什么这个方法有效,为什么追加
#submit
无效。
我检查了drupal
user\u register\u submit
code,似乎很清楚
$form\u state['redirect']
要将用户重定向到

您还可以使用以下功能:

function send_xml_submit_function($form, &$form_state){
  $email = $form_state['values']['mail'];
  $password = $form_state['values']['pass'];

  drupal_goto('REDIRECT_pATH', array('query' => array('email' => $email, 'password' => $password)));
}

谢谢你的回复,这和上面的不一样吗?form_alter是所有表单的一个示例,然后您只需在侧边使用一个开关盒来确定它是什么形式。。。这就是为什么我使用hook\u form\u FORMID\u alter来指定我将使用的表单。我对他那样做了。但都是一样的。可能
$form\u state['redirect']
值在其他地方更改了?这就是为什么我在这里的声明是无效的?但是我在哪里,怎么知道这个??感谢您的回复,但将
drupal_goto
放在自定义提交处理程序中并不好,因为可能还有一些进程尚未完成,它们将被破坏……在所有过程完成后需要重定向,这就是为什么我使用
$form_state['redirect']
@KarlMichaelLinantud不同意。。如果您将自己的提交回调添加到
#submit
元素(数组)的末尾,则不会有任何尚未完成的进程(由您控制哪些进程已完成,哪些进程剩余)。。