web-dev-qa-db-fra.com

erreur de formulaire non définie pour un champ spécifique

J'ai une sorte de champ conditionnel pour un formulaire d'inscription où l'utilisateur peut éventuellement s'inscrire avec un numéro de mobile ou une adresse e-mail.

J'essaye par exemple un formulaire personnalisé valider.

  function signup_validate($form, FormStateInterface $form_state) {
    $mobile = $form_state->getValue('field_mobile');
    $email = $form_state->getValue('field_email_address');

    if ($email[0]['value'] != '' || $mobile[0]['value'] != '') {
      $form_state->clearErrors();
    }
  }

Maintenant, clearErrors(); efface évidemment toutes les erreurs du formulaire même si d'autres champs ne sont pas valides, je veux savoir comment effacer l'erreur uniquement pour field_mobile Ou field_email_address

5
Janey

Au lieu de supprimer l'erreur, vous devez vous assurer que seules les erreurs de validation nécessaires sont définies en premier lieu.

Par exemple, vous pouvez utiliser "#states" dans vos éléments de formulaire pour définir "requis" en fonction de l'entrée utilisateur de l'autre champ.

2
Maouna

Bien que je sois d'accord avec la réponse acceptée, une façon d'atteindre votre objectif est de:

  1. Attribuez les erreurs de formulaire à une variable, comme $form_errors
  2. Supprimez toutes les erreurs de formulaire de $form_state
  3. Supprimez l'erreur de formulaire particulière de $form_errors
  4. Parcourez les $form_errors Restants, en les redéfinissant sur $form_state.

Donc, pour supprimer l'erreur field_mobile, Vous utiliseriez le code suivant:

// Temporarily store all form errors.
$form_errors = $form_state->getErrors();

// Clear the form errors.
$form_state->clearErrors();

// Remove the field_mobile form error.
unset($form_errors['field_mobile']);

// Now loop through and re-apply the remaining form error messages.
foreach ($form_errors as $name => $error_message) {
  $form_state->setErrorByName($name, $error_message);
}
15
Dan Murphy