菜单令牌Drupal 8备选方案

菜单令牌Drupal 8备选方案,drupal,drupal-8,drupal-commerce,drupal-navigation,Drupal,Drupal 8,Drupal Commerce,Drupal Navigation,我目前正在将一个大型Drupal商业网站从Drupal 7迁移到Drupal 8 到目前为止,我遇到的最大问题之一是缺少使用良好的模块的D8版本,主要问题是菜单令牌 我需要这个来创建一个与订单链接的网站用户帐户区域自定义菜单。我需要能够在url中包含当前用户ID: 用户/用户id/订单 在没有菜单令牌模块的情况下,有没有办法做到这一点?在菜单令牌模块准备好8之前,有一种方法是自己进行重定向。您可以通过实现EventSubscriber来实现这一点。这使得可以进行令牌替换并重定向响应-即如果菜单路

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

到目前为止,我遇到的最大问题之一是缺少使用良好的模块的D8版本,主要问题是菜单令牌

我需要这个来创建一个与订单链接的网站用户帐户区域自定义菜单。我需要能够在url中包含当前用户ID:

用户/用户id/订单


在没有菜单令牌模块的情况下,有没有办法做到这一点?

在菜单令牌模块准备好8之前,有一种方法是自己进行重定向。您可以通过实现EventSubscriber来实现这一点。这使得可以进行令牌替换并重定向响应-即如果菜单路径为/user/{user}/命令,则使用当前用户id替换{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;
  }
}

在菜单令牌模块为8做好准备之前,处理它的一种方法是自己进行重定向。您可以通过实现EventSubscriber来实现这一点。这使得可以进行令牌替换并重定向响应-即如果菜单路径为/user/{user}/命令,则使用当前用户id替换{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;
  }
}