경로 별명에서 노드 ID를 어떻게 얻을 수 있습니까?


16

나는 nid를 얻을 수 있기를 원하지만 내가 가지고있는 유일한 정보는 http://example.com/this-is-the-alias 입니다.

페이지에 없으면 해당 별칭에 대한 / node / *의 내부 경로를 얻는 방법이 있습니까? 아니면 바로 그 별칭에서 nid를 얻는 방법이 있습니까?

답변:


25

직접 함수가 있는지 확실하지 않지만 한 가지 경로는 경로 별칭 관리자 서비스를 사용하여 내부 경로를 찾은 다음 유효한 노드 ID로 객체로드를 수행하도록 경로를 정하는 것입니다.

$path = \Drupal::service('path.alias_manager')->getPathByAlias('/this-is-the-alias');
if(preg_match('/node\/(\d+)/', $path, $matches)) {
  $node = \Drupal\node\Entity\Node::load($matches[1]);
}

4
어떤 이유로, $path때로는와 같습니다 /this-is-the-alias. 루트 경로 ( node/{id})가 다른 별칭 #migrationstruggles 일 때가되었지만 다른 별칭도있었습니다.
크리스 해피

7

다음 코드를 사용하여 엔티티를 가져오고로드하고 해당 값에 액세스 할 수 있습니다.

  use \Drupal\Core\Url;

  $alias = \Drupal::service('path.alias_manager')->getPathByAlias('/etapes-de-la-vie');

  $params = Url::fromUri("internal:" . $alias)->getRouteParameters();
  $entity_type = key($params);
  $node = \Drupal::entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
  //to use dpm you need the devel module
  dpm($node->nid->value);

참고 문헌


1

Devel 모듈을 설치 한 다음 Devel 툴바 항목 Current route info 를 사용하십시오 .

결과적으로이 URL이 생성되며 직접 입력하여 drupal 설치에 알려진 모든 경로를 쿼리 매개 변수로 제공 할 수 있습니다.

/devel/routes/item?path=alias

노드 인 경우 나열된 라우트 변수의 끝에있는 원시 매개 변수에서 노드 ID를 찾습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.