Меню Token Drupal 8 альтернатива

В настоящее время я нахожусь в процессе перемещения большого коммерческого сайта Drupal с drupal 7 на drupal 8.

Одна из самых больших проблем, с которыми я сталкивался до сих пор, - это отсутствие версий D8 хорошо используемых модулей, основным из которых является Menu Token.

Это нужно для создания пользовательского меню в разделе "Аккаунт пользователя" на сайте со ссылками на заказы. Мне нужно иметь возможность включить текущий идентификатор пользователя в URL:

пользователь /идентификатор пользователя/ заказы

Есть ли способ сделать это без модуля Menu Token?

1 ответ

Один из способов справиться с этим, пока модуль токенов меню не будет готов к 8 - это сделать перенаправление самостоятельно. Вы можете сделать это, внедрив EventSubscriber. Это позволяет произвести замену токена и перенаправить ответ - т. Е. Если ваш путь по меню /user/{user}/orders, вы заменяете {user} на текущий идентификатор пользователя и перенаправляете ответ.

Ваш подписчик на событие может выглядеть примерно так:

namespace Drupal\YOUR_MODULENAME\EventSubscriber;

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


class RedirectRequestEventSubscriber implements EventSubscriberInterface {

  public function checkUserUidRedirection(GetResponseEvent $event) {
    if (\Drupal::currentUser()->isAnonymous()) {
      return;
    }
    $request_uri = urldecode(\Drupal::request()->getRequestUri());
    if (preg_match('/\{user\}/', $request_uri)) {
      $current_user = \Drupal::currentUser()->id();
      $request_uri = preg_replace('/\{user\}/', $current_user, $request_uri);
      $response = new RedirectResponse($request_uri, 301);
      $response->send();
    }
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    $events[KernelEvents::REQUEST][] = array('checkUserUidRedirection');
    return $events;
  }
}
Другие вопросы по тегам