현재 경로 별명 또는 경로를 얻으려면 어떻게합니까?


55

Drupal 8에서 현재 별명 및 / 또는 경로를 얻으려면 어떻게해야합니까?

Drupal 7에서는이 작업을 수행했습니다 drupal_get_path_alias(). Drupal 8에서 사용해야하는 동등한 코드는 무엇입니까?

답변:


106

다른 답변 중 일부는 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);

물론 처리 유형에 따라 경로 대신 경로로 작업하는 것이 가장 좋을 수도 있지만 다른 주제라고 생각합니다.


왜 경로 대신 경로를 사용하는 것이 더 낫다고 언급합니까? 간단한 예 / 이유를 제공 할 수 있습니까?
itsdarrylnorris 2016 년

@ darol100, 나는 그것에 대한 포괄적 인 답변을 제공하는 가장 좋은 사람은 아니지만 Drupal 8에서 프로그래밍 방식으로 URL 생성을위한 경로 사용이 공식적으로 감가 상각 된다고 말할 수 있습니다 -drupal.org/node/2046643 참조 . Symfony 라우트는 경로 구조와 독립적으로 자원을 맵핑하는보다 강력한 방법을 제공합니다 (라우트를 사용하여 링크를 빌드하는 경우 URL 경로 / 패턴이 변경 되더라도 해당 링크는 계속 작동합니다).
rjacobs

::getAliasByPath()슬래시가 없으면 경로 문자열을 더 이상 허용하지 않는 메모입니다 (베타 13 이후로 믿습니다).
기타 머신

5
getAliasByPath언어 접두사가없는 경로를 반환합니다. 어떻게 해결할 수 있습니까?
Philipp Michael

1
나뭇 가지 템플릿 안에서는 어떻습니까?
EAT

35

URL 별칭이없는 URL의 올바른 방법입니다.

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

\Drupal::request()->getRequestUri();하위 폴더에 Drupal 설치를 존중 합니까 ?
Brian

현재 경로가 아닌 경우 어떻게해야합니까? 문자열에서 얻을 수있는 방법이 있습니까?
BrandenB171

다음과 같은 절대 경로는 어떻게 습니까? mydrupalsite.org/node/123 ?
mcaleaa

1
글로벌 $ base_root; $ current_uri = \ Drupal :: 요청 ()-> getRequestUri (); $ current_path = $ base_root입니다. $ current_uri;
oknate

18

Drupal 8에서는 Twig로이를 수행 할 수 있습니다.

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

예:

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

에서 : https://www.drupal.org/docs/8/theming/twig/functions-in-twig-templates


1
위대한 찾기 @ nicola-de-lazzari-또한 귀하의 답변은 Views에서도 작동합니다. {{ url('<current>') }}대체 패턴 아래에 표시되지 않더라도 보기> 필드> 결과 다시 작성> 링크 경로가 허용 됩니다.
piet

16

Drupal 7에서 현재 경로를 얻으려면을 사용 current_path()하고 Drupal 8에서는을 사용 $url = Url::fromRoute('<current>');합니다.

출처 : https://www.drupal.org/node/2382211


current_path()그리고 drupal_get_path_alias()서로 다른 기능입니다.
itsdarrylnorris 2016 년

이 버전은 언어 접두사가있는 경로를 제공하므로 이것이 답이되어야합니다.
기 illa 보이스

OP는 drupal_get_path_alias ()와 동등한 D8을 요청합니다. D7 'node /'에서 별칭이 아닌 현재 경로를 반환합니다. $ nid
macjules

9

현재 경로 (별칭 경로)를 가져 오려면 :

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

현재 경로 (시스템 경로)를 가져 오려면 :

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

7

Drupal 8의 경우 이것이 내가 찾은 가장 깨끗한 솔루션입니다.

Url::fromRoute('<current>',array(),array('absolute'=>'true'));

5
\Drupal\Core\Url::fromRoute('<current>', [], ['absolute' => 'true'])->toString()
leymannx


2

쿼리 문자열이있는 절대 URL을 원한다면 :

use Drupal\Core\Url;
// ...
Url::fromRoute('<current>', [], ['query' => \Drupal::request()->query->all(), 'absolute' => 'true'])->toString();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.