web-dev-qa-db-fra.com

Comment limiter les erreurs de validation aux boutons de soumission?

En utilisant hook_form_alter, j'ai essayé d'ajouter des erreurs de validation de limite au bouton de soumission du flux de travail.

Dans la modification de formulaire, j'obtiens deux form_id, l'un est le nœud normal, ajoutez form_id et un autre est l'état du flux de travail form_id.

$form['actions']['workflow_course_status_save_as_draft']['#limit_validation_errors'] > = array(array('field_sample_course'));
5
Sri Harsha

J'ai fait exactement la même chose mais nous nous sommes trompés dans l'utilisation de #limit_validation_errors.

La raison pour laquelle cela échoue est que nous n'utilisons pas correctement #limit_validation_errors. Ce problème n'a rien à voir avec Workflow.

Lors de la validation du formulaire, si cette propriété est définie (les erreurs de validation sont limitées), Drupal core supprimera toutes les valeurs de formulaire non validées de l'état du formulaire, donc seules les valeurs qui auront été validées seront laissées pour soumettre des rappels.

Pour Drupal 8: http://cgit.drupalcode.org/drupal/tree/core/lib/Drupal/Core/Form/FormValidator.php#n147

Pour Drupal 7: http://cgit.drupalcode.org/drupal/tree/includes/form.inc?h=7.x#n119

Ma solution a été d'ajouter une validation personnalisée qui sera exécutée à la fin de toutes les validations et d'y supprimer toutes les erreurs liées au formulaire:

/**
 * Removes all validation errors that could happen when saving a draft
 *
 * @param $form
 * @param $form_state
 */
function my_custom_draft_validation($form, &$form_state) {
  $errors = form_get_errors();

  if (!empty($errors)) {
    $messages = drupal_get_messages('error', TRUE);

    // Remove error messages originated during the form validation
    foreach ($messages['error'] as $error) {
      if (!in_array($error, $errors)) {
        drupal_set_message('error', $error);
      }
    }

    // Remove all form errors
    form_clear_error();
  }
}
3
Nico

Si #limit_validation_errors est défini sur un bouton cliqué, le bouton doit également définir une propriété #submit (peut être défini sur un tableau vide).

Veuillez vous référer au lien https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Form!FormState.php/function/FormState%3A%3AsetErrorByName/8.2.x

1
developer