菜单令牌 Drupal 8 替代品

Menu Token Drupal 8 alternative

我目前正在将一个大型 Drupal 商务网站从 drupal 7 迁移到 drupal 8。

到目前为止,我遇到的最大问题之一是缺少常用模块的 D8 版本,主要问题是 Menu Token。

我需要这个来在网站的用户帐户区域创建一个带有订单链接的自定义菜单。我需要能够在 url:

中包含当前用户 ID

用户/用户id/订单

没有 Menu Token 模块有没有办法做到这一点?

在菜单标记模块准备好 8 之前,一种处理方法是您自己进行重定向。您可以通过实现 EventSubscriber 来做到这一点。这使得可以进行令牌替换和重定向响应 - 即,如果您的菜单路径是 /user/{user}/orders,您可以将 {user} 替换为当前用户 ID 并重定向响应。

您的活动订阅者可能看起来像这样:

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;
  }
}