web-dev-qa-db-fra.com

Comment obtenir l'ID de nœud auquel le commentaire est attaché dans hook_comment_insert?

Comment puis-je obtenir le nœud id auquel le commentaire est attaché dans hook_comment_insert?

J'ai essayé le code suivant:

function mymodule_comment_insert(Drupal\Core\Entity\EntityInterface $entity) {
  if ($entity->bundle() == 'comment_custom' && $entity->get('entity_type')->value == 'node') {

    // Below returns empty, because "$entity->get('entity_id')->value" is empty.
    $node = Node::load($entity->get('entity_id')->value);

    // No luck with this one too.
    $node = \Drupal::routeMatch()->getParameter('node');

  }
}
6
D34dman

la bonne façon de charger nid est,

$entity->get('entity_id')->target_id

et pas

$entity->get('entity_id')->value

En cas de doute sur la clé à utiliser,

essayer,

$entity->get('entity_id')->getValue()

et inspectez la valeur retournée.

5
D34dman

Il s'agit d'une réponse tardive basée sur une autre question signalée comme doublon de celle-ci.

L'entité Comment dispose de quelques méthodes utiles pour récupérer l'entité à laquelle elle est associée.

CommentInterface :: getCommentedEntity devrait obtenir l'objet entité auquel le commentaire est attaché.

Donc

if ($entity instanceof \Drupal\comment\CommentInterface) {
   $commentedEntity = $entity->getCommentedEntity();
   if ($commentedEntity && $commentedEntity instanceof \Drupal\node\NodeInterface) {
     // The entity that the comment is attached to is a node.
     // Do something with the commented entity.
   }
}
2
mradcliffe