it-swarm-vi.com

Làm thế nào để tôi có được bí danh hoặc đường dẫn hiện tại?

Làm cách nào tôi có thể lấy bí danh và/hoặc đường dẫn hiện tại trong Drupal 8?

Trong Drupal 7 Tôi đã làm điều này với drupal_get_path_alias() . Mã tương đương tôi nên sử dụng trong Drupal số 8?

61
Yusef

Một số câu trả lời khác chỉ đúng trong các phiên bản alpha/beta trước đó của Drupal 8 hoặc dường như chưa hoàn chỉnh. Kể từ phiên bản beta7 (và hy vọng là vĩnh viễn), nên áp dụng các quy tắc sau:

Đối với nguyên liệu hiện tại đường dẫn (đường dẫn không bí danh Drupal đường dẫn):

$current_path = \Drupal::service('path.current')->getPath();

Đối với hiện tại URI , đây là một đại diện trực tiếp của yêu cầu (thậm chí có thể bao gồm một chuỗi truy vấn):

$current_uri = \Drupal::request()->getRequestUri();

Tất nhiên không có gì đảm bảo rằng điều này $current_uri value sẽ cung cấp cho bạn một bí danh, ngay cả khi có sẵn cho yêu cầu, vì nó chỉ đại diện cho những gì người dùng đã yêu cầu. Vì vậy, để thực hiện đúng những gì bạn đang yêu cầu (lấy bí danh nếu có và đường dẫn nếu không) Tôi nghĩ bạn có thể làm:

$current_path = \Drupal::service('path.current')->getPath();
$result = \Drupal::service('path.alias_manager')->getAliasByPath($current_path);

Tất nhiên tùy thuộc vào loại xử lý bạn đang thực hiện, có thể tốt nhất là làm việc với các tuyến đường thay vì đường dẫn, nhưng tôi cho rằng đó là một chủ đề hoàn toàn khác.

116
rjacobs

Cách thích hợp cho URL mà không có bí danh URL.

$current_path = \Drupal::service('path.current')->getPath()
35
Daniel Wehner

Trong Drupal 8 bạn có thể làm điều này với Twig:

{{ url('<current>') }}

thí dụ:

<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>

từ: https://www.drupal.org/docs/8/theming/twig/fifts-in-twig-temsheet

20
Nicola De Lazzari

Để nhận được đường dẫn hiện tại trong Drupal 7, bạn sử dụng để sử dụng current_path(), nhưng trong Drupal 8 bạn sử dụng $url = Url::fromRoute('<current>');.

Nguồn: https://www.drupal.org/node/2382211

16
Nitesh Sethia

Để có được đường dẫn hiện tại (đường dẫn bí danh):

// Returns something like /about
$url = \Drupal\Core\Url::fromRoute('<current>');

Để có được đường dẫn hiện tại (đường dẫn hệ thống):

// Returns node/1
$path = $url->getInternalPath();
9
Rahul Baisane

Để có được url đầy đủ hiện tại không chỉ là đường dẫn (Drupal 8), đây là giải pháp sạch nhất tôi có thể tìm thấy:

Url::fromRoute('<current>',array(),array('absolute'=>'true'))->toString();
8
crobicha

Nếu bạn cũng muốn URL tuyệt đối với chuỗi truy vấn:

use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();
4
David Thomas

Trong Twig mẫu/Drupal 8:

URL của trang hiện tại

{{ url('<current>') }}

chỉ PATH

{{ path('<current>') }}

Xem: https://www.drupal.org/docs/8/theming/twig/fifts-in-twig-temsheet

3
elektrorl