Nous venons de commencer avec Drupal 8 et très rapidement nous avons rencontré notre premier problème.
Comment modifier un formulaire existant dans Drupal 8?
Nous devons modifier la méthode d'enregistrement du formulaire de nœud pour effectuer une redirection vers une autre page. Nous voulons modifier la forme du nœud pour devenir quelque chose comme une forme à plusieurs étapes. Une fois que l'utilisateur a créé un nouveau contenu, il est redirigé vers un nouveau formulaire (que nous avons créé) pour obtenir plus d'informations.
Nous avons résolu notre problème de mise en œuvre hook_entity_type_alter()
.
function mymodule_entity_type_alter(&$entity_info) {
$handlers = $entity_info['node']->get('handlers');
$handlers['form']['default'] = 'Drupal\mymodule\Form\MyExtendedNodeForm';
$handlers['form']['edit'] = 'Drupal\mymodule\Form\MyExtendedNodeForm';
$entity_info['node']->set('handlers', $handlers);
}
Nous avons ensuite créé une nouvelle classe de formulaire qui étend la forme du nœud et modifie la méthode de sauvegarde.
class MyExtendedNodeForm extends NodeForm {
public function save(array $form, FormStateInterface $form_state) {
parent::save($form, $form_state);
$node = $this->entity;
$form_state->setRedirect('entity.regions.add_form', ['nid' => $node->id()]);
}
}
Cela fonctionne parfaitement, mais est-ce bien? Si un autre module fait de même, notre code n'est plus exécuté.
save()
méthode » en fait des moyens. Cela signifie-t-il changer la façon dont les données sont enregistrées, ou simplement faire une redirection? Dans le premier cas, la réponse est plus complexe.
hook_form_alter()
. Si vous avez juste besoin de rediriger le formulaire, il suffit d'ajouter un gestionnaire de soumission de formulaire qui effectue la redirection.