web-dev-qa-db-fra.com

Pourquoi est-il préférable d'utiliser des abonnés aux événements plutôt que des hooks

Dans drupal 8, nous avons maintenant la possibilité d'utiliser des abonnés aux événements. Quelle en est la raison? Est-ce que cela fonctionne mieux avec la nouvelle API de cache?

Récemment, j'ai eu la tâche de devoir extraire des données d'un nœud lors de leur visualisation, mais hook_node_view() est mis en cache (comme presque tout) dans Drupal 8. J'ai donc fini par en utilisant un abonné aux événements. Pourquoi l'utilisation des abonnés aux événements est-elle une meilleure solution? Est-ce simplement qu'il est plus orienté objet?

5
Kevin howbrook

Vous pouvez voir cela sous deux angles. Premièrement, quelqu'un qui cherche un moyen de communiquer avec Drupal et utilise donc les hooks et les événements qui existent. Le second est celui d'un développeur qui conçoit ces API.

Drupal est au milieu des deux, d'un côté Drupal est un consommateur de l'API Symfony, presque chaque morceau de code est placé dans les événements Symfony, et de l'autre côté Drupal fournit des API, sous forme de hooks hérités ou d'événements Symfony personnalisés et d'autres méthodes comme des plugins.

Vous n'avez probablement pas utilisé l'une des API Drupal, plus probablement un événement du noyau Symfony, KernelEvents::REQUEST. Vous êtes alors dans la même position qu'un développeur Drupal et ce n'est pas une question sur les hooks ou les événements, car Symfony ne fournit pas de hooks.

Même si vous utilisiez l'une des API Drupal, vous n'auriez pas beaucoup de choix. Vous devriez sélectionner ce qui vous est fourni. Seulement si vous concevez une API dans votre module pour interagir avec d'autres modules, vous pouvez alors choisir entre un événement ou un crochet.

6
4k4