2016-05-23 7 views
0

Я добавил привязку проверки к форме создания узла.Проверьте, не прошла ли форма проверки.

Для моего проекта мне нужна эта проверка только один раз: в основном, я просто проверяю, существует ли значение в базе данных, и я уведомляю его об этом. Если пользователь все равно отправляет форму, я должен добавить ее в любом случае.

я хотел бы сделать что-то вроде этого:

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

в моем hook_form_alter, так что проверка хук вызывается только в первый раз.

Я не могу найти способ проверить, не прошла ли форма с ошибкой, какие-либо идеи?

+0

Попробуйте назвать его " my_module_validate». :) – kwoxer

+0

Что вы хотите проверить? Это текстовое поле или подобное? Затем я предлагаю вам использовать обратный вызов ajax, оставляя фокус текстового поля и обновляя форму с уведомлением (может быть элементом формы из #markup). Если вы хотите, чтобы это было в кэше проверки, вы можете сохранить его в $ formState, что вы уже сделали проверку. Если вы дадите мне больше информации, я приведу пример. – Triss

ответ

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 :) 
    } 
}