Làm thế nào tôi có thể nhận được ID nút từ bí danh đường dẫn?


17

Tôi muốn có thể nhận được nid nhưng thông tin duy nhất tôi có là http://example.com/this-is-the-alias .

Có cách nào để có được đường dẫn nội bộ của / node / * cho bí danh đó nếu tôi không ở trên trang không? Hoặc có cách nào để lấy nid từ bí danh đó ngay lập tức?

Câu trả lời:


25

Tôi không chắc có chức năng trực tiếp hay không, nhưng một tuyến là sử dụng dịch vụ quản lý bí danh đường dẫn để tra cứu đường dẫn nội bộ sau đó regex nó cho id nút hợp lệ để thực hiện tải đối tượng:

$path = \Drupal::service('path.alias_manager')->getPathByAlias('/this-is-the-alias');
if(preg_match('/node\/(\d+)/', $path, $matches)) {
  $node = \Drupal\node\Entity\Node::load($matches[1]);
}

4
Đối với một số lý do, $pathđôi khi bằng /this-is-the-alias. Đã từng là khi đường dẫn gốc ( node/{id}) là một bí danh khác #migrationstruggles, nhưng nó cũng có mặt với các bí danh khác.
Chris Chúc mừng

7

Bạn có thể sử dụng đoạn mã sau để nhận và tải một thực thể và có quyền truy cập vào các giá trị của nó.

  use \Drupal\Core\Url;

  $alias = \Drupal::service('path.alias_manager')->getPathByAlias('/etapes-de-la-vie');

  $params = Url::fromUri("internal:" . $alias)->getRouteParameters();
  $entity_type = key($params);
  $node = \Drupal::entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
  //to use dpm you need the devel module
  dpm($node->nid->value);

Người giới thiệu


1

Cài đặt mô-đun phát và sau đó sử dụng mục thanh công cụ phát thông tin Thông tin lộ trình hiện tại .

Điều này dẫn đến url này, bạn có thể nhập trực tiếp và cung cấp bất kỳ đường dẫn nào được biết đến khi cài đặt drupal của bạn làm tham số truy vấn:

/devel/routes/item?path=alias

Khi nó là một nút, bạn tìm thấy id nút trong các tham số thô ở cuối các biến tuyến được liệt kê.

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.