ブロック内に単純なフォームがあります:
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回呼び出されるのはなぜですか?
フォーム送信後のDrupalリダイレクト。したがって、2つのリクエストを効率的に作成しています。1つはフォーム送信用で、もう1つはリダイレクトの結果です。
Drupalフォームの送信後にリダイレクトする理由についての詳細は Wikipedia:Post/Redirect/Get を参照してください。
セットする $form_state['redirect'] = false
リダイレクトを防止します。