Dans Drupal 7, si je voulais obtenir l'ID du nœud du nœud actuellement affiché (par exemple node/145
), Je pourrais l'obtenir avec la arg()
Dans ce cas, arg(1)
renverrait 145.
Comment puis-je obtenir la même chose dans Drupal 8?
Le paramètre aura été converti de nid en objet nœud complet au moment où vous y aurez accès, donc:
$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();
}
Voir modifier l'enregistrement pour plus d'informations.
Il est correct d'utiliser \Drupal::routeMatch()->getParameter('node')
. Si vous avez juste besoin de l'ID de nœud, vous pouvez utiliser \Drupal::routeMatch()->getRawParameter('node')
.
Remarque sur la page d'aperçu du nœud, les éléments suivants ne fonctionnent pas:
$node = \Drupal::routeMatch()->getParameter('node');
$nid = $node->id();
Pour la page d'aperçu du nœud, vous devez charger le nœud de cette façon:
$node = \Drupal::routeMatch()->getParameter('node_preview');
$nid = $node->id();
si vous utilisez ou créez un bloc personnalisé, vous devez suivre ce code pour obtenir l'ID de nœud d'URL actuel.
// 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'));
}