gbalduzzi
gbalduzzi

Reputation: 10166

Check if form failed validation

I added a validation hook to a node creation form.

For my project, i need this validation only ONE time: basically i just check if a value already exists in the DB and i notify it to the user. If the user still submits the form, i must add it anyway.

i would like to do something like that:

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

in my hook_form_alter, so that validation hook is only called the first time.

I can't find a way to check if the form already failed validation, any ideas?

Upvotes: 0

Views: 427

Answers (1)

Triss
Triss

Reputation: 96

Here is one way of solving this issue your issue. But if you using some form input like text form I suggest that you use Ajax callback since it will feel more dynamic. Let me know if you want an example of how to solve it with Ajax callback?

I guess the key here is that I use $form_state['rebuild'] = true; so that form is rebuilt and than it easy to get the value from the $form_state['values']

Here is the code:

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

Upvotes: 0

Related Questions