J'ai un objet nœud, et j'essaie de l'utiliser pour obtenir un chemin donné dans Drupal 8.
Il y avait drupal_lookup_path()
dans Drupal 7 mais je ne vois aucun équivalent ou documentation pour Drupal 8.
Quelle est la nouvelle façon "Drupal" d'obtenir un chemin à partir d'un objet nœud?
Serait-ce quelque chose de simple comme $node->get('path')
?
Cela semble être une question simple, mais je ne trouve absolument aucune documentation à ce sujet.
Remarquez que je ne veux pas l'alias de chemin pour le chemin actuel; Je veux l'alias de chemin pour un nœud arbitraire, étant donné un objet de nœud ou un ID de nœud.
Pour obtenir le chemin d'accès d'un identifiant de nœud, utilisez AliasManager :: getAliasByPath :
$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);
Qu'en est-il de l'utilisation rl :
use Drupal\Core\Url;
...
$url = Url::fromRoute('entity.node.canonical', ['node' => $nid])->toString();
Si vous n'avez que le nid, la solution de 4k4 de
$alias = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$nid);
Fonctionne très bien. Mais si vous avez déjà un objet nœud, vous pouvez ignorer une étape ou deux. Les nœuds ont en fait des méthodes intégrées pour obtenir des URL.
$node->toUrl()->toString();
Renvoyer l'URL aliasée du nœud.
toUrl () renvoie un objet url. Voir ici https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/class/Url/8.2.x
et toString () est une méthode de l'objet url qui renvoie la représentation sous forme de chaîne de l'url.
Meilleure façon d'obtenir l'URL du nœud à partir de l'objet nœud
Il gérera également le langage du nœud.
Vous pouvez également utiliser la méthode de chargement de path.alias_storage
Pour renvoyer un tableau des détails de l'alias ou booléen false s'il n'y a pas de chemin trouvé pour ce nœud.
$aliasArray = \Drupal::service('path.alias_storage')->load(['source' => '/node/' . $nid]);
Si vous voulez obtenir l'url de l'alias de nœud par languages n'oubliez pas d'utiliser la langue comme celle-ci.
$alias_url = \Drupal::service('path.alias_manager')->getAliasByPath('/node/'. $nid, $langcode);
Si vous l'utilisez dans une classe n'oubliez pas d'utiliser correctement l'injection de dépendances.