2017-01-18 4 views
0

は、私がこれまで直面してきた最大の問題の一つは、D8のバージョンの欠如であるDrupalの8メニュートークンのDrupal 8代替

にDrupalの7から大Drupalの商取引のウェブサイトを移動するプロセスで、現在午前主なものはメニュートークンです。

注文にリンクしているウェブサイトのユーザーアカウント領域にカスタムメニューを作成するには、これが必要です。私は、URLに現在のユーザーIDを含めるbeableする必要があります。

ユーザー/ ユーザID /受注

メニュートークンモジュールせずにこれを行う方法はありますか?

答えて

1

メニュートークンモジュールが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; 
    } 
}