web-dev-qa-db-fra.com

Comment créer un bouton "revenir en arrière" ou "annuler" sur le formulaire d'ajout de nœud?

J'essaie d'ajouter un bouton "Annuler" à mon type de contenu.

Dans hook_form_alter(), j'utilise ce code:

  if ($form_state->getFormObject()->getOperation() == 'default') { // On node add, make it clear "cancel" deletes any input
    // Do not show cancel button to people who have not completed their profile.
    if ($user->hasPermission('create MYTYPE content')) {
      $form['actions']['submit_cancel'] = array (
        '#type' => 'submit',
        '#weight' => 999,
        '#value' => t('Delete all input and return to previous page'),
        '#submit' => array('MYMODULE_userpageredirect_callback'),
        );
      $form['actions']['submit_cancel']['#attributes']['class'][] = 'btn-danger';
    }
  }

....

/**
 * Cancel changes and return to previous page
 * @param array $form
 * @param FormStateInterface $form_state
 */
function MYMODULE_userpageredirect_callback(array &$form, FormStateInterface &$form_state) {
  $route_name = 'user.page';
  $form_state->setRedirect($route_name);
}

Cela crée un bouton d'annulation qui renvoie l'utilisateur à la page utilisateur lorsqu'il clique sur Annuler.

Problème

Si un champ est marqué comme obligatoire et que l'utilisateur n'a entré aucun texte dans le champ, le navigateur invite l'utilisateur à saisir une valeur dans le champ avant que le bouton d'annulation ne fonctionne.

3
Patrick Kenny

Ajouter '#limit_validation_errors' aidera à remplacer la validation,

$form['actions']['submit_cancel'] = array (
  '#type' => 'submit',
  '#weight' => 999,
  '#value' => t('Delete all input and return to previous page'),
  '#submit' => array('MYMODULE_userpageredirect_callback'),
  '#limit_validation_errors' => [],
);
5
Kstack

Le module cancel_button fournit cette fonctionnalité.

0
zanvidmar