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

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

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+

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){...

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...