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
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.
Bien que je sois d'accord avec la réponse acceptée, une façon d'atteindre votre objectif est de:
$form_errors
$form_state
$form_errors
$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);
}