답변:
매개 변수는 액세스 할 때까지 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();
}
자세한 정보는 변경 레코드 를 참조하십시오.
/taxonomy/term/{tid}
있습니까?
menu_get_object
입니까?
{}
경로에 작성하는 내용입니다. 분류 용어의 경우 경로 매개 변수를 taxonomy_term
경로 정의 라고 합니다 /taxonomy/term/{taxonomy_term}
. 여기 이렇게 얻을 수 있습니다 \Drupal::routeMatch()->getParameter('taxonomy_term')
.
사용자 정의 블록을 사용하거나 작성하는 경우 현재 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'));
}
노드 미리보기 페이지에서 다음이 작동하지 않습니다.
$node = \Drupal::routeMatch()->getParameter('node');
$nid = $node->id();
노드 미리보기 페이지의 경우 다음과 같이 노드를로드해야합니다.
$node = \Drupal::routeMatch()->getParameter('node_preview');
$nid = $node->id();