我有一個顯示兩個提交按鈕的窗體。第一個提交按鈕將$ form_state ['storage']設置爲一個值。第二個提交按鈕然後讀取這個$ form_state ['storage']的值。如果設置該值,則顯示成功消息。如果該值未設置,則顯示失敗消息。
這裏是將重現我的問題代碼:
function mymodule_test_admin() {
return drupal_get_form('mymodule_test_form');
}
function mymodule_test_form(&$form_state) {
$form['mymodule_test_form1'] = array(
'#type' => 'fieldset',
'#title' => t('test 1'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#tree' => TRUE
);
$form['mymodule_test_form1']['submit'] = array(
'#type' => 'submit',
'#value' => t('button 1'),
'#submit' => array('mymodule_test_form1_submit')
);
$form['mymodule_test_form2'] = array(
'#type' => 'fieldset',
'#title' => t('test 2'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#tree' => TRUE
);
$form['mymodule_test_form2']['submit'] = array(
'#type' => 'submit',
'#value' => t('button 2'),
'#submit' => array('mymodule_test_form2_submit')
);
return $form;
}
function mymodule_test_form1_submit($form, &$form_state) {
$form_state['storage']['test_1'] = 'test 1';
drupal_set_message(t('@message', array('@message' => $form_state['storage']['test_1'])));
}
function mymodule_test_form2_submit($form, &$form_state) {
if (isset($form_state['storage']['test_1'])) {
drupal_set_message(t('success'));
} else {
drupal_set_message(t('fail!'));
}
}
當您單擊第一個提交按鈕,$ form_state [「存儲」]設置正確。當您單擊第二個提交按鈕時,將顯示消息「成功」。到現在爲止還挺好。現在做一個頁面刷新。信息「失敗!」被展示。
所以,一切工作正常,直到頁面刷新。頁面刷新本質上只是調用第二個提交函數。理論上,$ form_state ['storage']仍然應該填充,顯示的消息應該是「成功」。但是,查看$ form_state轉儲後,頁面刷新後顯示$ form_state ['storage']爲NULL。我無法判斷我的代碼邏輯是否錯誤,或者是否在頁面刷新時清除了$ form_state ['storage']。
任何想法?
感謝您的幫助。