Программное перенаправление на узел/nid не перенаправляет на псевдоним URL - Drupal 8


Насколько я понимаю, модуль "Globalredirect" был объединен с модулем "Перенаправление". Таким образом, модуль перенаправления также должен перенаправлять ссылки как node/nid на свой псевдоним URL. При создании перенаправлений через интерфейс это работает отлично. Но если я программно делаю перенаправление на страницу узла/nid, она не перенаправляется на псевдоним URL.. Не уверен, что это плохое кодирование с моей стороны или функция, не реализованная в модуле.

  /* @file EventSubscriber.php */

  public function onRequest(GetResponseEvent $event) {
    $baseUrl = $event->getRequest()->getBaseUrl();
    $attr = $event->getRequest()->attributes;
    if(null !== $attr && null !== $attr->get('node') && $attr->get('node')->get('type')->getString() == 'product_group' && 
    $attr->get('_controller') == '\Drupal\node\Controller\NodeViewController::view') {
      $node = $attr->get('node');
      $references = $node->get('field_references');
      $values = $references->referencedEntities();
      if($values){
        $nid = $values[0]->id();
        $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
        $event->setResponse(new RedirectResponse($baseUrl. '/' . $language . '/node/' . $nid));
      }
  }

  static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = ['onRequest'];
    return $events;
  }

Я использую это код для перенаправления группы продуктов на первый указанный узел сущности, который использует автоматическую структуру URL-адресов, созданную шаблоном pathauto, но псевдоним URL-адреса не отображается после перенаправления, он показывает node/nid. Я проверил, что псевдоним URL на этой странице действительно работает, и даже добавил перенаправление с этого конкретного узла/nid на его псевдоним URL через интерфейс, но безуспешно.

Я делаю что-то не так? Работает ли это так, как задумано? Есть ли для меня более чистый/лучший способ перенаправление? Все еще довольно новичок в Drupal 8..

Используя:
Друпал 8.1.3
Перенаправление 8.x-1.0-alpha1
Патавто 8.x-1.0-alpha3

Author: Noedel, 2016-06-22

1 answers

Попробуйте использовать Url-адрес.

$url = Url::fromRoute('entity.node.canonical', ['node' => $node->id()]);
new RedirectResponse($url->toString());
 5
Author: Bart, 2016-06-23 15:28:21