drupal:简单的形式和答案在同一个网址

时间:2013-10-11 11:43:40

标签: php forms drupal drupal-7

我正在绕着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”中。

它需要知道表单返回的状态,并返回表单或不同的内容,但我没有做到。

制作图表来说明我的观点,万一它没有出现: diagram

感谢您指出正确的方向。

1 个答案:

答案 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模式重定向到当前页面。