web-dev-qa-db-ja.com

現在のページのルート名を取得します

現在のページのルート名はpage.html.twig?このページは、デフォルトのフィードバックフォームによって生成されます。

26
Oana Hulpoi

現在のルート名を取得するには、次を使用します:

_$route_name = \Drupal::routeMatch()->getRouteName();
_

現在のページのルート名をテーマの「.theme」ファイルの変数として追加できます。このような_preprocess_page関数を追加し、drupalキャッシュをクリアします。

_/**
 * Implements hook_preprocess_page().
 *
 */
function mytheme_preprocess_page(&$variables) {
  $variables['route_name'] = \Drupal::routeMatch()->getRouteName();
}
_

その後、次のようにpage.html.twigでアクセスできます。

_{{ route_name }}
_

注:\Drupal::routeMatch()->getRouteName()はnullを返す場合があります。

クラス内にいる場合、適切に処理するには、ルート一致サービスをコンストラクターに挿入し、次のように呼び出します。

_$this->currentRouteMatch->getRouteName()
_

コンストラクター(および変数)は次のようになります。

_  /**
   * The current route match.
   *
   * @var \Drupal\Core\Routing\RouteMatchInterface
   */
  protected $currentRouteMatch;

  /**
   * Constructs a new ThemeTestSubscriber.
   *
   * @param \Drupal\Core\Routing\RouteMatchInterface $current_route_match
   */
  public function __construct(RouteMatchInterface $current_route_match) {
    $this->currentRouteMatch = $current_route_match;
  }
_

サービスクラスの場合は、カスタムモジュールのyamlファイルでサービスに渡します。

_services:
  mymodule.service:
    class: Drupal\mymodule\MyCustomService
    arguments: ['@current_route_match']
_
62
oknate