2

複数ステップのフォームを作成していますが、ユーザーが誤ってページを更新した場合に、保存された情報を失うことを望んでいません。再現する手順:

1) Press 'ok'-button
2) var_dump($form_state['multistep']['step']) == 2
3) Refresh page
4) var_dump($form_state['multistep']['step']) still == 2
5) Press 'ok'-button
6) var_dump($form_state['multistep']['step']) == 3
7) Refresh page
8) var_dump($form_state['multistep']['step']) == 2 rather than 3

ここには、私が気付いていない Drupal フォーム メカニックの問題があるはずです。なぜこれが起こるのか誰か説明できますか?以下のコード例。

function multistep_test_form($form, &$form_state) {
    if( !isset($form_state['multistep']['step']) ) {
        $form_state['multistep']['step'] = 1;
    } else {
        var_dump($form_state['multistep']['step']);
    }

    $form['submit'] = array(
        '#type' => 'submit',
        '#value' => 'ok'
    );

    return $form;
}

function multistep_test_form_submit($form, &$form_state) {
    $form_state['rebuild'] = TRUE;
    $form_state['multistep']['step']++;
}
4

1 に答える 1

1

値は$form_state['page_values']に保存されます。

$form_state['page_values'][1] = $form_state['values'];

より詳細な例については、APIドキュメントのサンプルモジュールを確認してください。

フォームの例

値を運ぶためのフォーム送信ハンドラーの例

値を検証します(必要な場合)

于 2012-02-18T18:33:34.460 に答える