¿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]);
}

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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.