Jak mogę uzyskać bieżący alias i / lub ścieżkę w Drupal 8?
W Drupal 7 zrobiłem to z drupal_get_path_alias()
. Jaki kod powinienem zastosować w Drupal 8?
Jak mogę uzyskać bieżący alias i / lub ścieżkę w Drupal 8?
W Drupal 7 zrobiłem to z drupal_get_path_alias()
. Jaki kod powinienem zastosować w Drupal 8?
Odpowiedzi:
Niektóre inne odpowiedzi były poprawne tylko podczas poprzednich wersji alfa / beta Drupala 8 lub wydawały się niekompletne. Od wersji beta7 (i, mam nadzieję, że na stałe), powinny obowiązywać następujące zasady:
Dla bieżącej surowej ścieżki (niezaaloryzowanej ścieżki Drupala):
$current_path = \Drupal::service('path.current')->getPath()
W przypadku bieżącego identyfikatora URI , który jest prawie bezpośrednią reprezentacją żądania (może nawet zawierać ciąg zapytania):
$current_uri = \Drupal::request()->getRequestUri();
Oczywiście nie ma gwarancji, że ta $current_uri
wartość da ci alias, nawet jeśli jest on dostępny dla żądania, ponieważ reprezentuje tylko to, czego zażądał użytkownik. Więc aby ściśle zrobić to, o co prosisz (uzyskaj alias, jeśli jest dostępny, i ścieżkę, jeśli nie). Myślę, że możesz:
$current_path = \Drupal::service('path.current')->getPath();
$result = \Drupal::service('path.alias_manager')->getAliasByPath($current_path);
Oczywiście w zależności od rodzaju wykonywanego przetwarzania najlepiej jest pracować z trasami zamiast ścieżkami, ale przypuszczam, że to zupełnie inny temat.
::getAliasByPath()
która nie będzie już akceptować ciągu ścieżki bez wiodącego ukośnika (od wersji beta13 wierzę).
getAliasByPath
zwraca ścieżkę bez prefiksu języka. Masz pomysł, jak to rozwiązać?
Właściwy sposób dla adresu URL bez aliasu adresu URL.
$current_path = \Drupal::service('path.current')->getPath()
\Drupal::request()->getRequestUri();
szacunek instaluje Drupal w podfolderze?
W Drupal 8 możesz to zrobić za pomocą Twig:
{{ url('<current>') }}
przykład:
<a href="{{ url('<current>') }}">{{ 'Reload'|t }}</a>
from: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
{{ url('<current>') }}
nawet jeśli nie jest wymieniona w obszarze Wzory zastępowania.
Aby uzyskać bieżącą ścieżkę w Drupal 7, używasz current_path()
, ale w Drupal 8 używasz $url = Url::fromRoute('<current>');
.
current_path()
i drupal_get_path_alias()
są to różne funkcje.
Aby uzyskać bieżącą ścieżkę (ścieżkę aliasu):
// Returns something like /about
$url = \Drupal\Core\Url::fromRoute('<current>');
Aby uzyskać bieżącą ścieżkę (ścieżkę systemową):
// Returns node/1
$path = $url->getInternalPath();
W szablonie Twig / Drupal 8:
URL bieżącej strony
{{ url('<current>') }}
tylko ŚCIEŻKA
{{ path('<current>') }}
Zobacz: https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates
Jeśli chcesz też bezwzględny adres URL z kwerendą:
use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();