현재 노드 ID는 어떻게 얻습니까?


51

Drupal 7에서 현재 표시된 노드 (예 :)의 노드 ID를 node/145얻으려면 arg()함수로 가져올 수 있습니다. 이 경우 arg(1)145를 반환합니다.

Drupal 8에서 어떻게 동일한 결과를 얻을 수 있습니까?

답변:


103

매개 변수는 액세스 할 때까지 nid에서 전체 노드 오브젝트로 업 캐스트되었습니다.

$node = \Drupal::routeMatch()->getParameter('node');
if ($node instanceof \Drupal\node\NodeInterface) {
  // You can get nid and anything else you need from the node object.
  $nid = $node->id();
}

자세한 정보는 변경 레코드 를 참조하십시오.


4
나는 당신이 이것을 조심해서 추가하고 싶다-방금 \ Drupal :: routeMatch ()-> getParameter ( 'node'); 노드 개정 삭제 페이지에서 1 항목 (노드 ID)의 배열을 리턴하므로 오브젝트라고 가정하는 메소드를 호출하면 "치명적 오류 : 멤버 함수 getType ( )를 문자열에 추가하십시오.
Jeff Burnz

방문하면 매개 변수를 어떻게 얻을 수 /taxonomy/term/{tid}있습니까?
AshwinP

이 기능 대체품 menu_get_object입니까?
Frank Robert Anderson

그렇습니다 @Frank. 물론 조금 다르지만 어떤 엔티티 페이지 (있는 경우)를 모르는 상황
Clive

1
@AshwinP이 매개 변수는 {}경로에 작성하는 내용입니다. 분류 용어의 경우 경로 매개 변수를 taxonomy_term경로 정의 라고 합니다 /taxonomy/term/{taxonomy_term}. 여기 이렇게 얻을 수 있습니다 \Drupal::routeMatch()->getParameter('taxonomy_term').
Jdrupal

17

사용하는 것이 맞습니다 \Drupal::routeMatch()->getParameter('node'). 노드 ID 만 있으면을 사용할 수 있습니다 \Drupal::routeMatch()->getRawParameter('node').


4

사용자 정의 블록을 사용하거나 작성하는 경우 현재 URL 노드 ID를 얻으려면이 코드를 따라야합니다.

// add libraries
use Drupal\Core\Cache\Cache;  

// code to get nid

$node = \Drupal::routeMatch()->getParameter('node');
  $node->id()  // get current node id (current url node id)


// for cache

public function getCacheTags() {
  //With this when your node change your block will rebuild
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
  //if there is node add its cachetag
    return Cache::mergeTags(parent::getCacheTags(), array('node:' . $node->id()));
  } else {
    //Return default tags instead.
    return parent::getCacheTags();
  }
}

public function getCacheContexts() {
  //if you depends on \Drupal::routeMatch()
  //you must set context of this block with 'route' context tag.
  //Every new route this block will rebuild
  return Cache::mergeContexts(parent::getCacheContexts(), array('route'));
}

이 게시물은 이해가되지 않습니다. 이 코드의 위치를 ​​아는 사람은 없습니다.
레스터 피바디

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