メニュートークンモジュールが8の準備が整うまで、対処する方法の1つは自分自身をリダイレクトすることです。 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;
}
}