我正在绕着Drupal API工作,但收效甚微。
我想要一个带有表单的URL,这样当我“获取”该URL时,我得到表单(有那个),当我在该表单输入错误的“代码”并POST相同的URL时获得带有错误消息的相同表单(也有),但是当我使用正确的“代码”发布相同的URL 时,我得到了不同的代码,不再显示以前的表单。
无重定向,所有请求(帖子和获取)都应定位到domain.com/entry
这是我的代码(简化):
function entry_menu() {
$items['entry'] = array(
'page callback' => 'entry_handler',
'access arguments' => array('access entry'),
type => MENU_CALLBACK,
);
return $items;
}
function entry_handler() {
return drupal_get_form('entry_daily_code');
}
function entry_daily_code($form, &$form_state) {
$form['code'] = array(
'#type' => 'textfield',
'#title' => 'Code for Today',
);
form['submit'] = array(
'#type' => 'submit',
'#value' => 'Access',
);
return $form;
}
function entry_daily_code_submit($form, &$form_state) {
if (isset($form_state['values']['code']) && $form_state['values'] == "1234") {
drupal_set_message(t('Success'));
}
else {
drupal_set_message(t('Fail'));
}
}
我想我想要做的事情应该发生在“entry_handler”中。
它需要知道表单返回的状态,并返回表单或不同的内容,但我没有做到。
制作图表来说明我的观点,万一它没有出现:
感谢您指出正确的方向。
答案 0 :(得分:1)
添加验证处理程序:
function entry_daily_code_validate($form, &$form_state) {
if ($form_state['values']['code'] != '1234') {
form_set_error('code', t('Fail'));
}
}
function entry_daily_code_submit($form, &$form_state) {
// If you are here, the validation handler already checked
// that $form_state['values']['code'] == '1234'
drupal_set_message(t('Success'));
// Redirect to a different page:
$form_state['redirect'] = 'entry/success';
}
如果您没有在提交处理程序中重定向,Drupal将根据Post / Redirect / Get模式重定向到当前页面。