ฉันจะรับโหนด ID ปัจจุบันได้อย่างไร


51

ใน Drupal 7 ถ้าฉันต้องการรับ node 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 ('โหนด'); จะส่งคืนอาร์เรย์ 1 รายการ (รหัสโหนด) บนหน้าการแก้ไขโหนดที่ลบหน้าดังนั้นถ้าคุณเรียกวิธีการในสิ่งที่คุณคิดว่าเป็นวัตถุคุณจะได้รับข้อผิดพลาดร้ายแรงเช่น "ข้อผิดพลาดร้ายแรง: การเรียกใช้ฟังก์ชันสมาชิก getType ( ) ในสตริง "
Jeff Burnz

ฉันจะได้รับพารามิเตอร์ถ้าผมไปเยี่ยม/taxonomy/term/{tid}?
AshwinP

นี่เป็นการทดแทนการทำงานmenu_get_objectหรือไม่?
Frank Robert Anderson

ใช่แล้ว @Frank มันแตกต่างกันเล็กน้อย แต่ถ้าคุณตกหล่นในบริบทที่ไม่รู้ว่าหน้าเอนทิตี้ (ถ้ามี) มันเป็นวิธีที่แนะนำในการค้นหา
Clive

1
@AshwinP พารามิเตอร์คือสิ่งที่คุณเขียนไว้{}ในเส้นทางของคุณ สำหรับคำอนุกรมวิธาน paramater เส้นทางที่เรียกว่านิยามเส้นทางtaxonomy_term ที่นี่คุณจะได้รับมันเช่นนี้/taxonomy/term/{taxonomy_term} \Drupal::routeMatch()->getParameter('taxonomy_term')
Jdrupal

17

\Drupal::routeMatch()->getParameter('node')มันเป็นความถูกต้องในการใช้ \Drupal::routeMatch()->getRawParameter('node')หากคุณเพียงแค่ต้องใช้รหัสโหนดคุณสามารถใช้


4

หากคุณกำลังใช้หรือสร้างบล็อกที่กำหนดเองคุณต้องทำตามรหัสนี้เพื่อรับรหัสโหนด url ปัจจุบัน

// 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'));
}

โพสต์นี้ไม่สมเหตุสมผล ไม่มีทางที่ใครจะรู้ว่ารหัสนี้ไปที่ไหน
เลสเตอร์พีบอดี

2

หมายเหตุบนหน้าตัวอย่างโหนดสิ่งต่อไปนี้ใช้ไม่ได้:

$node = \Drupal::routeMatch()->getParameter('node');
$nid = $node->id();

สำหรับหน้าตัวอย่างโหนดคุณต้องโหลดโหนดด้วยวิธีนี้:

$node = \Drupal::routeMatch()->getParameter('node_preview');
$nid = $node->id();

วิธีการโหลดวัตถุโหนดในหน้าตัวอย่างโหนด?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.