Lấy tên tuyến đường của trang hiện tại


24

Tên tuyến đường của trang hiện tại có sẵn trong page.html.twig? Trang này được tạo bởi mẫu phản hồi mặc định.

Câu trả lời:


57

Để có được tên tuyến hiện tại, sử dụng:

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

Bạn có thể thêm tên tuyến đường của trang hiện tại dưới dạng một biến trong tệp ".theme" của chủ đề. Thêm một hàm _pre process_page như thế này và xóa bộ đệm ẩn.

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

Sau đó, bạn có thể truy cập trong page.html.twig như thế này:

{{ route_name }}

Lưu ý: \Drupal::routeMatch()->getRouteName() đôi khi sẽ trả về null.

Nếu bạn ở trong một lớp, để thực hiện mọi thứ một cách chính xác, bạn sẽ muốn tiêm dịch vụ khớp tuyến đường trong hàm tạo và sau đó gọi nó theo cách này:

$this->currentRouteMatch->getRouteName()

Hàm tạo (và biến) sẽ như thế này:

  /**
   * 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;
  }

Nếu đó là một lớp dịch vụ, thì bạn sẽ chuyển nó vào dịch vụ trong tệp yaml trong mô-đun tùy chỉnh của bạn:

services:
  mymodule.service:
    class: Drupal\mymodule\MyCustomService
    arguments: ['@current_route_match']

Có một CLI (lệnh chế độ đường truyền) ở đâu đó hiển thị tất cả các tuyến đường drupal ... dường như không thể nhớ đó là gì ... Tôi sẽ cập nhật (trừ khi có người khác biết)
sea26.2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.