web-dev-qa-db-ja.com

フォーム#redirectが機能していませんか?

送信時にユーザー作成フォームをホームページにリダイレクトするようにしています。私はコンテンツプロファイルを使用しているため、送信ボタンを共有する2つのフォームです。両方のフォームで#redirect = '/'を設定しても、フォームは常にそれ自体にリダイレクトされます。それは動作し、すべてですが、私が望む方法にリダイレクトしません。

何か案は?

コード:

function mymodule_form_alter(&$form, $form_state, $form_id) {
      switch ($form_id) {
        case 'user_register':
        $form['#redirect'] = '/';
        break;
        case 'coordinator_node_form':
        $form['#redirect'] = '/';           
    }
}
2
Joren

_$form['#redirect']_について考慮すべき2つの事実があります。

  • _$form_state['#redirect']_は、フォーム送信ハンドラーで設定され、_$form['#redirect']_よりも優先されます。
  • _$form['#redirect']_および_$form_state['#redirect']_は、モジュールによって「#action」が設定されているフォームでは無視されます。これが、ユーザーログインフォームで発生することです。
  • _$form['#redirect']_が設定されている場合、_$form_state['#redirect']_および_$_REQUEST['destination']_は無視されます。代わりにその値が使用されます。

フォームをリダイレクトし、設定したパスに確実にリダイレクトされるようにする場合は、hook_form_alter()を実装して、_$form_state['#redirect']_を変更するフォーム送信ハンドラを追加する必要があります。そのフックを実装するモジュールは、そのモジュールの_$form_state['#redirect']_を変更する他のモジュールの後に実行する必要があります。
これは効果がありませんが、前に挙げた最後の2つのケースでは効果がありません。

6
kiamlaluno

掘り下げた結果、ここに答えが見つかりました: http://drupal.org/node/934664

どうやら宛先は#redirectを上書きするので、宛先の設定を解除するだけで機能します。

4
Joren