Проверьте, не прошла ли проверка формы
Я добавил хук проверки в форму создания узла.
Для моего проекта мне нужна эта проверка только ОДИН раз: в основном я просто проверяю, существует ли значение в БД, и уведомляю его пользователю. Если пользователь все еще отправляет форму, я должен добавить ее в любом случае.
Я хотел бы сделать что-то подобное:
if (form_did_not_fail_validation_before) {
$form['#validate'][] = 'my_module_validation_hook';
}
в моем hook_form_alter, так что ловушка проверки вызывается только в первый раз.
Я не могу найти способ проверить, не прошла ли проверка формы, есть идеи?
1 ответ
Вот один из способов решения этой проблемы. Но если вы используете какой-либо ввод формы, такой как текстовая форма, я предлагаю использовать обратный вызов Ajax, поскольку он будет более динамичным. Дайте мне знать, если вы хотите пример того, как решить эту проблему с помощью Ajax callback?
Я думаю, что ключ здесь в том, что я использую $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 :)
}
}