我目前正在将一个大型Drupal商业网站从drupal 7移动到drupal 8。
到目前为止,我遇到的最大问题之一是缺乏D8版本的常用模块,主要是菜单令牌。
我需要这个在网站的用户帐户区域创建一个自定义菜单,其中包含指向订单的链接。我需要能够在网址中包含当前用户ID:
user / 用户ID / orders
有没有一种方法可以在没有菜单标记模块的情况下执行此操作?
答案 0 :(得分:1)
处理它的一种方法是,在菜单标记模块准备好8之前,自己进行重定向。您可以通过实现EventSubscriber来实现。这样就可以更换令牌并重定向响应 - 即如果您的菜单路径是/ user / {user} / orders,则用当前用户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;
}
}