Làm cách nào tôi có thể có được 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 8 là gì?
Làm cách nào tôi có thể có được 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 8 là gì?
Câu trả lời:
Một số câu trả lời khác chỉ đúng trong các phiên bản alpha / beta trước đây 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 đường dẫn thô hiện tại (đường dẫn Drupal không bí danh):
$current_path = \Drupal::service('path.current')->getPath()
Đối với URI hiện tại , phần lớn đại diện trực tiếp cho yêu cầu (thậm chí có thể bao gồm chuỗi truy vấn):
$current_uri = \Drupal::request()->getRequestUri();
Tất nhiên không có gì đảm bảo rằng $current_uri
giá trị này 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 nghiêm túc 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.
::getAliasByPath()
sẽ không còn chấp nhận một chuỗi đường dẫn mà không có dấu gạch chéo hàng đầu (kể từ phiên bản beta13 tôi tin).
getAliasByPath
không trả về đường dẫn mà không có tiền tố ngôn ngữ. Bất kỳ ý tưởng làm thế nào để giải quyết điều này?
Cách thích hợp cho URL mà không có bí danh URL.
$current_path = \Drupal::service('path.current')->getPath()
\Drupal::request()->getRequestUri();
tôn trọng cài đặt Drupal trong thư mục con không?
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
{{ url('<current>') }}
ngay cả khi không được liệt kê trong Mẫu thay thế.
Để có đượ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>');
.
current_path()
và drupal_get_path_alias()
chúng là các chức năng khác nhau.
Để 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();
Trong mẫu Twig / 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
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();