En Drupal 7, si quisiera obtener la identificación del nodo del nodo que se muestra actualmente (por ejemplo node/145
), podría obtenerlo con la arg()
función. En este caso, arg(1)
devolvería 145.
¿Cómo puedo lograr lo mismo en Drupal 8?
El parámetro habrá sido subido de nid a objeto de nodo completo para cuando tenga acceso a él, por lo tanto:
$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();
}
Vea el registro de cambios para más información.
Es correcto de usar \Drupal::routeMatch()->getParameter('node')
. Si solo necesita la ID del nodo, puede usarla \Drupal::routeMatch()->getRawParameter('node')
.
si está utilizando o creando un bloque personalizado, debe seguir este código para obtener la identificación del nodo de URL actual.
// 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'));
}
Tenga en cuenta que en la página de vista previa del nodo, lo siguiente no funciona:
$node = \Drupal::routeMatch()->getParameter('node');
$nid = $node->id();
Para la página de vista previa del nodo, debe cargar el nodo de esta manera:
$node = \Drupal::routeMatch()->getParameter('node_preview');
$nid = $node->id();
¿Cómo cargar un objeto de nodo en la página de vista previa de nodo?
/taxonomy/term/{tid}
?menu_get_object
?{}
de su ruta. Para términos de taxonomía, el parámetro de ruta se llamataxonomy_term
definición de ruta/taxonomy/term/{taxonomy_term}
. Aquí se puede conseguir de esta manera,\Drupal::routeMatch()->getParameter('taxonomy_term')
.