0

我在节点创建表单中添加了一个验证钩子。

对于我的项目,我只需要一次验证:基本上我只是检查数据库中是否已经存在一个值并将其通知给用户。如果用户仍然提交表单,我无论如何都必须添加它。

我想做这样的事情:

if (form_did_not_fail_validation_before) {
  $form['#validate'][] = 'my_module_validation_hook';
}

在我的 hook_form_alter 中,因此仅第一次调用验证钩子。

我找不到检查表单是否已经通过验证失败的方法,有什么想法吗?

4

1 回答 1

0

这是解决此问题的一种方法。但是如果你使用一些表单输入,比如文本表单,我建议你使用 Ajax 回调,因为它会感觉更动态。如果您想要一个如何使用 Ajax 回调解决它的示例,请告诉我?

我想这里的关键是我使用$form_state['rebuild'] = true;了这样的形式来重建表格,并且很容易从$form_state['values']

这是代码:

function example_form(array $form, array &$form_state)
{
    $form['temp'] = array(
        '#type'  => 'value',
        '#value' => array_key_exists('values', $form_state) ? $form_state['values']['temp'] + 1 : 1,
    );

    if (array_key_exists('values', $form_state) && $form_state['values']['temp'] == 1)
    {
        $form['message'] = array(
            '#markup' => t('I only give you one warning'),
            '#prefix' => '<p>',
            '#suffix' => '</p>',
        );
    }

    $form['submit_button'] = array(
        '#type'   => 'submit',
        '#value' => t('Click Here!'),
    );

    return $form;
}

function example_form_validate(array $form, array &$form_state)
{
    $form_state['rebuild'] = true;
}

function example_form_submit(array $form, array &$form_state)
{
    if($form_state['values']['temp'] == 1) {
        // I will not store anything
    } else {
        // now I will store it :)
    }
}
于 2016-11-17T20:07:20.320 回答