Как я могу получить текущий псевдоним и / или путь в Drupal 8?
В Drupal 7 я сделал это с drupal_get_path_alias()
. Какой эквивалентный код я должен использовать в Drupal 8?
Как я могу получить текущий псевдоним и / или путь в Drupal 8?
В Drupal 7 я сделал это с drupal_get_path_alias()
. Какой эквивалентный код я должен использовать в Drupal 8?
Ответы:
Некоторые из других ответов были правильными только в предыдущих альфа / бета-версиях Drupal 8 или казались неполными. Начиная с бета7 (и, надеюсь, навсегда), должны применяться следующие правила:
Для текущего необработанного пути (необъявленный путь Drupal):
$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()
они разные функции.
Чтобы получить текущий путь (aliased path):
// 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();