【问题标题】:redirection on custom submit handler自定义提交处理程序上的重定向
【发布时间】:2014-04-02 08:56:21
【问题描述】:

所以基本上这是我解决这个问题的第二天。

我有我的模块send_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中的处理之后它并没有重定向,它只是刷新页面。

【问题讨论】:

    标签: drupal-7 form-submit hook-form-alter


    【解决方案1】:

    像这样使用hook_form_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_register_submit 代码,似乎很清楚 $form_state['redirect'] 将用户重定向到 <front>

    【讨论】:

    • 谢谢回复 不是和上面一样吗? form_alter 适用于所有表单,然后您只需在旁边使用一个 switch case 来确定它是什么形式......这就是为什么我使用 hook_form_FORMID_alter 来指定使用什么表单,特别是。我这样做是为了。但它是一样的。也许$form_state['redirect'] 的值在其他地方被改变了?这就是为什么我在这里的声明是覆盖?但是我在哪里以及如何知道这一点?谢谢
    【解决方案2】:

    你也可以使用drupal_goto函数:

    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)));
    }
    

    【讨论】:

    • 感谢您的回复,但将drupal_goto 放在您的自定义提交处理程序中并不好,因为可能仍有一些流程尚未完成并且它们将被破坏......在所有这些之后需要重定向进程已完成,这就是我使用 $form_state['redirect'] 的原因
    • @KarlMichaelLinantud 不同意..如果您将自己的提交回调添加到#submit element(array) 的末尾,则不会有任何尚未完成的流程(您可以控制哪个流程有已经完成,剩下的)..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多