¿Cómo puedo obtener la ID del nodo de un alias de ruta?

Respuestas:

25

No estoy seguro de si hay una función directa, pero una ruta es usar el servicio de administrador de alias de ruta para buscar la ruta interna y luego regexearlo para una identificación de nodo válida para realizar una carga de objeto en:

$path = \Drupal::service('path.alias_manager')->getPathByAlias('/this-is-the-alias');
if(preg_match('/node\/(\d+)/', $path, $matches)) {
  $node = \Drupal\node\Entity\Node::load($matches[1]);
}
Shawn Conn
fuente
44
Por alguna razón, a $pathveces es igual a /this-is-the-alias. Una vez fue cuando la ruta raíz ( node/{id}) era otro alias #migrationstruggles, pero también estaba presente con otros alias.
Chris Happy
7

Puede usar el siguiente código para obtener y cargar una entidad y tener acceso a sus valores.

  use \Drupal\Core\Url;

  $alias = \Drupal::service('path.alias_manager')->getPathByAlias('/etapes-de-la-vie');

  $params = Url::fromUri("internal:" . $alias)->getRouteParameters();
  $entity_type = key($params);
  $node = \Drupal::entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
  //to use dpm you need the devel module
  dpm($node->nid->value);

Referencias

Adrian Cid Almaguer
fuente
1

Instale el módulo de desarrollo y luego use el elemento de la barra de herramientas de desarrollo Información de ruta actual .

Esto da como resultado esta url, que puede escribir directamente y proporcionar cualquier ruta conocida para su instalación de drupal como parámetro de consulta:

/devel/routes/item?path=alias

Cuando se trata de un nodo, encuentra la identificación del nodo en los parámetros sin formato al final de las variables de ruta enumeradas.

4k4
fuente