it-swarm.com.de

Setzen Sie den Formularwert bei fehlgeschlagener Validierung auf leer

Ich muss ein einzelnes Feld auf leer setzen, wenn die Validierung fehlschlägt. Das Formular wird mit der Formular-API von Drupal 8) erstellt.

In meiner Funktion validateForm() habe ich Folgendes:

public function validateForm(array &$form, FormStateInterface $form_state) {
  $values = $form_state->getValues();
  if($values['myfield']!='something') {
     $form_state->setValue('myfield', '');
     $form_state->setErrorByName('myfield', $this->t('Sorry, this field value is not correct.'));
  }
}

Leider hat das oben Gesagte keine Auswirkung - wenn das Formular neu erstellt wird, enthält myfield immer noch den vom Benutzer übermittelten Wert.

Ich nehme an, das hat etwas mit der Reihenfolge zu tun, in der diese Funktionen aufgerufen werden. Oder vielleicht, weil $ form_state nicht als Referenz übergeben wird? (Ich kann dies nicht tun, da es dann nicht mehr mit der Klasse FormBase kompatibel ist, die ich erweitere).


Eine Lösung, die ich gefunden habe, besteht darin, über das Array $ form in meiner Funktion validateForm() auf das Formularelement zuzugreifen:

$form['myfield']['#value'] = '';

Aber das oben genannte fühlt sich nicht wirklich nach der richtigen Lösung an?

6
user34185

Verwenden Sie setValueForElement :

$new_value = '';
$form_state->setValueForElement($form['myfield'], $new_value);
3
alberto56

In Ihrem validateForm können Sie verwenden:

 public function validateForm(array &$form, FormStateInterface $form_state) {

    if($form_state->getValue('myfield')!='something') {

        $form['myfield']['#value']='';

        $form_state->setErrorByName('myfield', t('Sorry, this field value is not correct.'));
    }

  }