Création d'un lien depuis l'ID de noeud dans Drupal 8
Je suis de la vérification de Drupal 8 et essayez de générer un lien basé sur l'ID de nœud d'un article.
Dans Drupal 7, il est quelque chose comme:
$options = array('absolute' => TRUE);
$nid = 1; //Node ID
$url = url('node/' . $nid, $options);
Présente les résultats dans un lien absolu avec la bonne url alias.
Donc l'url()-fonction semble être obsolète; qu'est-ce que Drupal-8?
Ressemble vraiment une fonction de base pour moi, mais je ne pouvais pas trouver toutes les références utiles.
source d'informationauteur Nicensin
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser le
\Drupal\Core\Url
classe, en particulier de sonfromRoute
méthode statique. Drupal 8 utilise les routes qui ont un nom différent de leur chemin d'accès d'URL. Dans votre cas, la route à utiliser est la forme canonique de l'itinéraire pour un nœud de l'entité:entity.node.canonical
.\Drupal\Core\Url::fromRoute()
ne sera pas renvoyer une chaîne de caractères, mais un objet. Pour obtenir l'URL comme une chaîne de caractères, vous devez appeler sontoString()
méthode.La méthode statique n'est pas facilement vérifiable,
$url->toString()
besoin d'un initialisé conteneur. Vous pouvez remplacer la méthode statique avec un appel àUrlGeneratorInterface::generateFromRoute()
sur leurl_generator
service.Malheureusement, cette méthode est marqué comme
@internal
si vous n'êtes pas censé l'utiliser dans le code de l'utilisateur (c'est à dire. en dehors de Drupal core).Créer URL absolue:
Créer de lien absolu objet:
Dans le cas où vous avez entièrement chargé objet de nœud, vous pouvez simplement appeler
$node->toUrl()
pour obtenir l'URL voulue. Par défaut, il retourne l'URL canonique d'un nœud (node/NID), mais il est possible de construire d'autres URLs contenues dans le Nœud définition de l'entité (voir Drupal\node\Entity\Node.php).En est de même pour d'autres types d'entités.
hehe, c'est de la merde en termes d'obtenir des URL de domaine (Rameau version d'obtenir des URL)
Si vous voulez que l'URL (et le titre) qui est dans un champ que vous avez à faire d'un objet de la classe:
Drupal\Core\Url
Si vous avez obtenu le nœud par drupal_entity (Rameau Réglages) puis vous devez: (je vais utiliser "onglet" en tant que nœud) onglet['#node'].field_link
Cela vous donne en utilisant:
onglet['#node'].field_link.uri -> l'URI (URI n'est pas l'URL)
onglet['#node'].field_link.titre -> le titre
mais, ce n'est pas la fin.
c'est mieux pour l'accès Drupal\link\Plugin\Domaine\FieldType\LinkItem par:
onglet['#node'].field_link.get(0)
onglet['#node'].field_link[0]
(à la fois faire de même)
ensuite, vous pouvez accéder à ce qui est le plus intéressant:
onglet['#node'].field_tab_link[0].getUrl() un Drupal\Core\Url objet.
Vous pouvez accéder à cet objet aussi par l'utilisation de cette ligne ci-dessous, à partir de l'intérieur que de nœud du fichier de modèle: de contenu.field_link[0]['#url"] (c'est aussi Drupal\Core\objet d'Url)
De l'objet méthodes:
Vous devriez l'utiliser comme ça:
Vous devez utiliser
Drupal\Core\Url;
classe.Exemple:
Si vous passez argument
Sinon