我在节点创建表单中添加了一个验证挂钩。
对于我的项目,我只需要一次验证:基本上我只是检查数据库中是否已存在一个值,然后我将其通知给用户。如果用户仍然提交表单,我仍然必须添加它。
我想做类似的事情:
if (form_did_not_fail_validation_before) {
$form['#validate'][] = 'my_module_validation_hook';
}
在我的hook_form_alter中,因此只在第一次调用验证钩子。
我无法找到一种方法来检查表单是否已经验证失败,有什么想法吗?
答案 0 :(得分: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 :)
}
}