現在のノードIDを取得するにはどうすればよいですか?


51

Drupal 7では、現在表示されているノードのノードIDを取得したい場合(例:)node/145arg()関数で取得できます。この場合、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( )文字列に」。
ジェフバーンズ

訪問した場合、どのようにパラメータを取得できます/taxonomy/term/{tid}か?
AshwinP

これは機能的な代替物menu_get_objectですか?
フランクロバートアンダーソン

はい、@ Frank。それはもちろんのビット異なるですが、あなたはそれが何の実体ページ(もしあれば)を知らない状況にドロップしている場合、これは見つけるために推奨される方法です
クライヴ

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.