You are here

表单重新构建

 

在验证期间,你可能判定你没有从用户那里获取足够的信息。例如,你可能将表单数值放到一个文本分析引擎中进行检查,然后判定这一内容很有可能是垃圾信息。最后,你想重新显示表单(里面包含用户已输入的值),不过这次添加了一个CAPTCHA,用来证明这个用户不是一个机器人。通过在你的验证函数中设置$form_state['rebuild'],你就可以通知Drupal需要进行一次重构了,就像这样:
 
$spam_score = spamservice($form_state['values']['my_textarea'];
if ($spam_score > 70) {
    $form_state['rebuild'] = TRUE;
    $form_state['formexample']['spam_score'] = $spam_score;
}
 
    在你的表单定义函数中,你的代码应该包含如下所示的内容:
function formexample_nameform($form_id, $form_state = NULL) {
    // Normal form definition happens.
    ...
    if (isset($form_state['formexample']['spam_score']) {
        // If this is set, we are rebuilding the form;
        // add the captcha form element to the form.
        ...
    }
    ...
}

老葛的Drupal'培训班 Think in Drupal

Drupal版本:

评论

官方勘误:http://www.drupalbook.com/errata2?page=5    Page 244
Error: 

function formexample_nameform($form_id, $form_state = NULL) {

Correction: 

function formexample_nameform($form_state) {

Description of the Error: 

Drupal 6 always passes the form state as the first argument to form builder functions.