NID (또는 노드 객체)에서 경로 별칭 가져 오기


22

노드 객체가 있고 Drupal 8에서 주어진 경로를 얻는 데 사용하려고합니다.

있었다 drupal_lookup_path()드루팔 7하지만 난 드루팔 8 동등한 또는 문서를 확인할 수 없습니다.

노드 객체로부터 경로를 얻는 새로운 "Drupal"방법은 무엇입니까?

간단한 것 $node->get('path')입니까?

이것은 간단한 질문처럼 보이지만 절대 그에 대한 문서를 찾지 못했습니다.

현재 경로의 경로 별칭을 원하지 않습니다. 노드 객체 또는 노드 ID가 주어지면 임의의 노드에 대한 경로 별명을 원합니다.



중복 될 수 있다고 생각합니다. 많은 답변이있는 링크 된 질문을 확인하십시오.
Kevin

다른 질문에는 OP가 노드 ID를 알고있는 노드가 아닌 현재 경로의 경로 별명을 얻는 방법에 대한 답변이 있습니다.
kiamlaluno

복제본이 아닙니다-현재 경로를 원하지 않습니다. 임의의 노드 객체 또는 NID가 주어진 경로를 원합니다.
Jack Ryan

예, 이것은 중복이 아닙니다. 내 대답을 참조하십시오.
4k4

답변:



19

사용에 대한 어떤 URL을 :

use Drupal\Core\Url;    

...

$url = Url::fromRoute('entity.node.canonical', ['node' => $nid])->toString();

5
이것과 AliasManager를 사용하는 것의 주요 차이점 인 IIRC는 이것이 또한 아웃 바운드 경로 프로세서가 실행되도록하는 반면 AliasManager는 별칭 조회 만 수행한다는 것입니다. Url객체를로 직접 가져올 수도 있습니다 $node->toUrl().
mpdonadio

1
훨씬 더 나은 솔루션.
Patrick

16

당신이 nid, 4k4의 해결책 만 가지고 있다면

$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);

잘 작동합니다. 그러나 이미 노드 개체가있는 경우 한두 단계를 건너 뛸 수 있습니다. 노드에는 실제로 URL을 가져 오는 메소드가 내장되어 있습니다.

$node->toUrl()->toString();

노드의 별칭을 반환합니다.

toUrl ()은 url 객체를 반환합니다. 여기를 참조하십시오 https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x

toString ()은 url의 문자열 표현을 반환하는 url 객체의 메서드입니다.


9
참고 $node->toUrl()->setAbsolute()->toString()등을 공유하기 위해 유용을 절대 URL을 반환합니다

2

또한 load 메소드 from path.alias_storage을 사용하여 별칭 세부 정보의 배열을 반환하거나 해당 노드에 대한 경로가 없으면 부울 false를 반환 할 수 있습니다 .

$aliasArray = \Drupal::service('path.alias_storage')->load(['source' => '/node/' . $nid]);


2

노드 객체에서 노드 URL을 얻는 가장 좋은 방법

  • 절대 경로 : $ node-> toUrl ()-> setAbsolute ()-> toString ();
  • 상대 경로 : $ node-> toUrl ()-> toString ();

또한 노드 언어를 처리합니다.


0

언어 별로 노드 별명 URL을 얻으려면 이와 같은 언어를 사용하는 것을 잊지 마십시오.

$alias_url = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'. $nid, $langcode);

클래스에서 사용하는 경우 종속성 주입을 올바르게 사용하는 것을 잊지 마십시오.


-5

좀 더 "Drupalesque"솔루션을 원했지만 여기에 내가 일을하게 된 것이 있습니다.

  function getPathFromNID($nid) {
    $db = \Drupal::database();

    $data = $db
        ->select('url_alias', 'u')
        ->fields('u', ['alias'])
        ->condition('source', '/node/' . $nid)
        ->execute()
        ->fetchField();
    return $data;
  }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.