Як я можу отримати поточний псевдонім та / або шлях у Drupal 8?
У Drupal 7 я це робив із drupal_get_path_alias()
. Який еквівалентний код я повинен використовувати в Drupal 8?
Як я можу отримати поточний псевдонім та / або шлях у Drupal 8?
У Drupal 7 я це робив із drupal_get_path_alias()
. Який еквівалентний код я повинен використовувати в Drupal 8?
Відповіді:
Деякі з інших відповідей були правильними лише під час попередніх альфа-бета-версій Drupal 8 або здавалися неповними. Щодо бета7 (і, сподіваємось, постійно), слід застосовувати такі правила:
Для поточного неочищеного шляху (нежилого Друпальського шляху):
$current_path = \Drupal::service('path.current')->getPath()
Для поточного URI , який є майже прямим поданням запиту (він може включати навіть рядок запиту):
$current_uri = \Drupal::request()->getRequestUri();
Звичайно, немає гарантії, що це $current_uri
значення надасть вам псевдонім, навіть якщо такий доступний для запиту, оскільки він відображає лише те, що запитав користувач. Отже, щоб суворо робити те, про що ви просите (отримайте псевдонім, якщо він є, і шлях, якщо ні), я думаю, ви могли б зробити:
$current_path = \Drupal::service('path.current')->getPath();
$result = \Drupal::service('path.alias_manager')->getAliasByPath($current_path);
Звичайно, залежно від типу обробки, яку ви виконуєте, можливо, найкраще працювати з маршрутами замість шляхів, але я вважаю, що це зовсім інша тема.
::getAliasByPath()
більше не буде приймати рядок шляху без провідної косої риси (оскільки в бета13 я вважаю).
getAliasByPath
повертає шлях без мовного префікса. Будь-яка ідея, як це вирішити?
Правильний спосіб отримання URL-адреси без псевдоніму URL-адреси.
$current_path = \Drupal::service('path.current')->getPath()
\Drupal::request()->getRequestUri();
поважає встановлення Drupal у підпапці?
У Drupal 8 це можна зробити за допомогою Twig:
{{ url('<current>') }}
приклад:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
від: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
{{ url('<current>') }}
хоч і не вказаний у шаблонах заміни.
Для отримання поточного шляху в Drupal 7 ви використовуєте для використання current_path()
, але в Drupal 8 ви використовуєте $url = Url::fromRoute('<current>');
.
Джерело: https://www.drupal.org/node/2382211
current_path()
і drupal_get_path_alias()
вони різні функції.
Щоб отримати поточний шлях (псевдонім):
// Returns something like /about
$url = \Drupal\Core\Url::fromRoute('<current>');
Щоб отримати поточний шлях (системний шлях):
// Returns node/1
$path = $url->getInternalPath();
У шаблоні Twig / Drupal 8:
URL-адреса поточної сторінки
{{ url('<current>') }}
тільки ПАТ
{{ path('<current>') }}
Дивіться: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
Якщо ви також хочете отримати абсолютну URL-адресу із рядком запитів:
use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();