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.
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' => [],
);
Le module cancel_button fournit cette fonctionnalité.