Como posso obter o ID do nó de um alias de caminho?

16

Quero poder obter o nid, mas a única informação que tenho é http://example.com/this-is-the-alias .

Existe uma maneira de obter o caminho interno de / node / * para esse alias se eu não estiver na página? Ou existe uma maneira de obter o nid desse alias imediatamente?

BrandenB171
fonte

Respostas:

25

Não tenho certeza se existe uma função direta, mas uma rota é usar o serviço do gerenciador de alias de caminho para procurar o caminho interno e, em seguida, regexá-lo para uma identificação de nó válida para executar um carregamento de objeto:

$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
fonte
4
Por alguma razão, $pathàs vezes é igual a /this-is-the-alias. Era uma vez quando o caminho raiz ( node/{id}) era outro alias #migrationstruggles, mas também estava presente com outros aliases.
23718 Chris Happy
7

Você pode usar o código a seguir para obter e carregar uma entidade e ter acesso aos seus 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);

Referências

Adrian Cid Almaguer
fonte
1

Instale o módulo devel e use o item Informações da rota atual da barra de ferramentas devel .

Isso resulta neste URL, que você pode digitar diretamente e fornecer qualquer caminho conhecido para a instalação do drupal como parâmetro de consulta:

/devel/routes/item?path=alias

Quando é um nó, você encontra o ID do nó nos parâmetros brutos no final das variáveis ​​de rota listadas.

4k4
fonte