web-dev-qa-db-ja.com

2回呼び出されるhook_form

ブロック内に単純なフォームがあります:

function mymodule_block_view($delta = '') {
      switch($delta) {
        case 'some_name':

          $block['subject'] = t('title');
          $block['content'] = drupal_get_form('mymodule_form');
      }
      return $block;
    }

フォームを送信すると、mymodule_form()メソッドが2回呼び出されます。最初の実行では、テキストフィールドに入力した値は$ form_stateに正しく保存されます。 2回目の実行では、それらはもうありません。なぜこれが当てはまるのか誰かが知っていますか?

私がやりたいことは非常に簡単です。テキストフィールドに入力した値を保持したいので、フォームが送信されると、ページが再ロードされ、指定した値がフォームの新しいdefault_valuesになります。コードでこれを行う方法を知っていますが、前述のように、2回目の実行ではform_stateが空であるため、フォームは「デフォルト」のdefault_valuesを使用します。

Mymodule_form()が2回呼び出されるのはなぜですか?

4
dschenk

フォーム送信後のDrupalリダイレクト。したがって、2つのリクエストを効率的に作成しています。1つはフォーム送信用で、もう1つはリダイレクトの結果です。

Drupalフォームの送信後にリダイレクトする理由についての詳細は Wikipedia:Post/Redirect/Get を参照してください。

セットする $form_state['redirect'] = falseリダイレクトを防止します。

9
Oswald