Drupal 8 - Rediriger l'utilisateur lors de l'accès aux pages d'un type de contenu en particulier

Ça vient à contre-sens du paradigme des nœuds, mais parfois on souhaite que les pages de détail d'un nœud d'un type de contenu en particulier ne soient pas accessible.

Voici comment faire :

1ère étape, déclarer un services dans mon_module.services.yml

# mon_module.services.yml
services:
  mon_module.node_cp_redirect:
    class: Drupal\mon_module\EventSubscriber\NodeCPRedirect
    tags:
      - { name: event_subscriber }

2ème étape, créer l'event subscriber: src/EventSubscriber/NodeCPRedirect.php dans le dossier de mon module.

Ici je vais chercher à rediriger tous les noeuds de type « communiques_de_presse » vers la vue « view.front_communiques_de_presse.page », mais cela peut-être évidement n'importe quelle route.

# mon_module/src/EventSubscriber/NodeCPRedirect.php
<?php

namespace Drupal\mon_module\EventSubscriber;

use Drupal\Core\Url;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;

class NodeCPRedirect implements EventSubscriberInterface {

  public static function getSubscribedEvents() {
    return [KernelEvents::REQUEST => [['redirectionCommuniquesPresse']]];
  }

  /**
   * Redirection des contenus de type communique_de_presse vers la vue de listing.
   */
  public function redirectionCommuniquesPresse(GetResponseEvent $event) {
    $request = $event->getRequest();

    if ($request->attributes->get('_route') !== 'entity.node.canonical') {
      return;
    }
    if ($request->attributes->get('node')->getType() !== 'communique_de_presse') {
      return;
    }
    $response = new RedirectResponse(Url::fromRoute('view.front_communiques_de_presse.page')->toString(), 301);
    $event->setResponse($response);
  }

}

 

Commentaires

Bonjour, je vous félicite pour la clarté de vos informations. Je vais prochainement rechercher un développeur pour un nouveau projet en drupal 8. Pouvons-nous communiquer ?
Cordialement
Alain Adijès

Ajouter un commentaire

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