2016-05-23 14 views
0

Ich habe einen Validierungspunkt zu einem Knotenerstellungsformular hinzugefügt.Überprüfen Sie, ob die Validierung des Formulars fehlgeschlagen ist

Für mein Projekt brauche ich diese Validierung nur EINMAL: im Grunde überprüfe ich einfach, ob bereits ein Wert in der DB existiert und ich benachrichtige ihn dem Benutzer. Wenn der Benutzer das Formular noch einreicht, muss ich es trotzdem hinzufügen.

ich möchte so etwas tun:

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

in meinem hook_form_alter, so dass die Validierung Haken nur das erste Mal aufgerufen wird.

Ich kann keinen Weg finden, um zu überprüfen, ob das Formular bereits Validierung fehlgeschlagen, irgendwelche Ideen?

+0

versuchen, es zu nennen " my_module_validate ". :) – kwoxer

+0

Was möchten Sie überprüfen? Ist es ein Textfeld oder ähnliches? Dann schlage ich vor, dass Sie einen Ajax-Callback verwenden, wenn Sie den Fokus des Textfelds verlassen und das Formular mit einer Notiz aktualisieren (könnte ein Formularelement von #markup sein). Wenn Sie es in Validierung Haken haben möchten, können Sie es in der $ formState speichern, die Sie bereits Validierung durchgeführt haben. Wenn Sie mir mehr Informationen geben, werde ich ein Beispiel geben. – Triss

Antwort

0

Hier ist eine Möglichkeit zur Lösung dieses Problems Ihr Problem. Aber wenn Sie eine Formulareingabe wie Textform verwenden, schlage ich vor, dass Sie Ajax Callback verwenden, da es sich dynamischer anfühlt. Lassen Sie mich wissen, wenn Sie ein Beispiel haben möchten, wie Sie es mit Ajax Callback lösen können?

Ich denke, hier ist der Schlüssel, dass ich $form_state['rebuild'] = true; so dass Form wieder aufgebaut wird und als es leicht, den Wert aus dem $form_state['values']

Hier zu erhalten, ist der 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 :) 
    } 
} 
Verwandte Themen