मेरे पास यह बहुत बुनियादी ब्लॉक है जो सिर्फ वर्तमान नोड की आईडी दिखाता है।
<?php
/**
* @file
* Contains \Drupal\mymodule\Plugin\Block\ExampleEmptyBlock.
*/
namespace Drupal\mymodule\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Cache\Cache;
/**
* @Block(
* id = "example_empty",
* admin_label = @Translation("Example: empty block")
* )
*/
class ExampleEmptyBlock extends BlockBase {
/**
* {@inheritdoc}
*/
public function build() {
$node = \Drupal::routeMatch()->getParameter('node');
$build = array();
if ($node) {
$config = \Drupal::config('system.site');
$build = array(
'#type' => 'markup',
'#markup' => '<p>' . $node->id() . '<p>',
'#cache' => array(
'tags' => $this->getCacheTags(),
'contexts' => $this->getCacheContexts(),
),
);
}
return $build;
}
/**
* {@inheritdoc}
*/
public function getCacheTags() {
$node = \Drupal::routeMatch()->getParameter('node');
return Cache::mergeTags(parent::getCacheTags(), ["node:{$node->id()}"]);
}
/**
* {@inheritdoc}
*/
public function getCacheContexts() {
return Cache::mergeContexts(parent::getCacheContexts(), ['user.node_grants:view']);
}
}
लेकिन एक बार कैश हो जाने के बाद, ब्लॉक वही रहता है, चाहे मैं किस नोड पर जाऊं। मैं नोड आईडी प्रति परिणाम को सही ढंग से कैश कैसे करूं?
getCacheTags()
BlockBase से, तुम बस जरूरत एक टैग है कि आपके नोड का प्रतिनिधित्व जोड़ने (नोड: {एनआईडी})। क्षमा करें, अब मैं जल्दी में हूं, मैं बाद में बेहतर समझा सकता हूं,