kgaut.net // Développeur web PHP / Drupal freelance
contactez-moi

Drupal 8 - Rediriger sur le listing des noeuds après la création d'un contenu

Cet article a été écrit il y a plus de quatre ans, son contenu n'est peut-être plus d'actualité.

Sur une commande expresse de Vincent, voici comment modifier les formulaires de création / modification de nœud pour être redirigé sur la page de listing des nœuds plutôt que sur le nœud en lui même lors de la création ou de la modification d'un contenu.

1 - Altération du type d'entité

# mon_module.module
function mon_module_entity_type_alter(array &$entity_types) {
  $entity_types['node']->setFormClass('default', Drupal\mon_module\Entity\Form\CustomNodeForm::class);
  $entity_types['node']->setFormClass('edit', Drupal\mon_module\Entity\Form\CustomNodeForm::class);
}

2 - Classe du formulaire

# web/modules/mon_module/src/Entity/Form/CustomNodeForm.php
<?php

namespace Drupal\mon_module\Entity\Form;

use Drupal\Core\Form\FormStateInterface;
use Drupal\node\NodeForm;

class CustomNodeForm extends NodeForm {

  public function save(array $form, FormStateInterface $form_state) {
    parent::save($form, $form_state);
    $form_state->setRedirect('view.content.page_1');
  }

}

 

Commentaires (2)

Comments

Adrien (non vérifié)

Bonjour,

Une autre astuce que je j'utilise beaucoup:

function __redirect_XXX(array &$form, FormStateInterface $form_state)
{
// ...
// Logique pour déterminer la valeur de $url.
// $url doit être un objet de type \Drupal\Core\Url
// ...
$form_state->setRedirectUrl($url);
}

XXX_preprocess_form_alter() {
$form['actions']['submit']['#submit'][] = '__redirect_XXX';
}

Du coup, je suis curieux de connaître la méthode la + optimale techniquement ?

A+

Adrien (non vérifié)

Une petite coquille s'est glissée dans mon précèdent commentaire:

XXX_preprocess_form_alter() {...

Comprendre:

XXX_preprocess_form_alter(&$form, FormStateInterface $form_state, $form_id){...