-2

我试图通过反复试验来理解drupal表单(与Drupal文档不相处),我有点困惑为什么这不起作用:

function sform() {
    $form['password'] = array(
        '#type' => 'password',
        '#title' => 'enter 1234'
    );

    $form['submit'] = array(
        '#type' => 'submit',
        '#value' => '1234 and then click',
    );

    $form['#method'] = 'post';

    return $form;
}
function sform_submit($form_id, $form) {
    if (isset($form['values']['password']) && $form['values]']['password'] == "1234") {
        drupal_set_message(t('Success;'), '');
    }
    else {
        drupal_set_message("({$form['values']['password']})", 'warning');
        drupal_set_message(t('Failure'), 'error');
    }
}

我知道这一切都是非常基本的,而且我的想法不是让它以任何方式保持这样的状态。正如我所说,我只是在刺激 API 以了解哪些工作以及如何工作。

但问题是,基本检查是“密码”字段存在并且等于“1234”。而且每次都失败。在失败分支中,我吐出了我从“密码”中获得的值,但我看到它仍然是“1234”......

$form['values']['password'] 和 "1234" 之间的比较不应该像我在这里想要的那样工作,是否有一些非常明显的原因?

4

1 回答 1

3

您的 if 测试有错字:

$form['values]']['password']
//should be
$form['values']['password']

此外,您的功能设置似乎不正确,请看这里:https ://api.drupal.org/api/drupal/includes!form.inc/group/form_api/7

使用表单时,您应该传递$form和(通过引用)。$form_state

取自上面的链接:

function my_module_example_form($form, &$form_state) {
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
  );
  return $form;
}
function my_module_example_form_validate($form, &$form_state) {
  // Validation logic.
}
function my_module_example_form_submit($form, &$form_state) {
  // Submission logic.
}

另外,您的菜单挂钩应drupal_get_form作为回调调用,您的函数名称应作为页面参数调用。

$items['sform'] = array(
    'title' => 'My Form',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('sform'),
    'access arguments' => array('some rule'),
);
于 2013-10-10T14:08:35.077 回答