我有一个显示两个提交按钮的表单。第一个提交按钮将$ 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 ['storage']已正确设置。单击第二个提交按钮时,将显示消息“成功”。到现在为止还挺好。现在做一个页面刷新。消息“失败!”显示。
所以一切正常,直到页面刷新。页面刷新本质上只调用第二个提交函数。理论上,$ form_state ['storage']仍应填充,显示的消息应为“成功”。但是,看一下$ form_state转储显示页面刷新后$ form_state ['storage']为NULL。我无法判断我的代码逻辑是否错误,或者是否在页面刷新时清除了$ form_state ['storage']。
有什么想法吗?
感谢您的帮助。
答案 0 :(得分:8)
您需要在处理form1_submit结束时重建表单,这将保持先前提交的值不变。这是多步骤形式的一种情况,但与Drupal 5中的方式略有不同。
function mymoduel_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'])));
$form_state["rebuild"] = TRUE;
}
希望这有帮助, Sarfaraz
答案 1 :(得分:1)
提交后的存储将被清除,使用$ _SESSION ['mymodule_test_XXX']以多步形式存储...