0

我正在围绕 Drupal API 工作,但成功有限。

我想要一个带有表单的 URL,这样当我“获取”该 URL 时,我会得到表单(有那个),当我在该表单中输入错误的“代码”并发布相同的 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”中。

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

做了一个图表来说明我的观点,以防它没有遇到: 图表

感谢您提供正确方向的任何指示。

4

1 回答 1

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

于 2013-10-11T11:51:23.840 回答