Débogage des crochets qui ont tiré?


9

Je suis un peu nouveau dans le développement de modules.

Existe-t-il un moyen de générer actuellement les hooks exécutés sur certains nœuds?

Cela se ferait-il avec xdebug?

Réponses:


9

À moins que vous n'obteniez une erreur fatale (ou un écran vide), il est assez facile d'obtenir une liste des modules qui seront invoqués lorsqu'un hook spécial est appelé:

$modules = module_implements($hook);
foreach ($modules as $key =>  $module) {
  $function = $module . '_' . $hook;
  if (!function_exists($function)) {
    unset($modules[$key]);
  }
}
// $modules is now an array containing all the modules that will be invoked by $hook.

Vous pouvez utiliser des trucs comme xDebug pour suivre le flux de Drupal, mais cela peut être écrasant, surtout si vous êtes nouveau sur Drupal.


1
Si vous souhaitez essayer le débogage et ne voulez pas passer des heures à le configurer, vous pouvez essayer Quickstart . C'est une machine virtuelle et avec drush, il est très facile de configurer un site, puis de mettre votre module, d'importer dans Netbeans et de déboguer.
Whisky

1
Cela ne montrerait-il pas simplement tous les modules qui implémentent un hook particulier, pas tous les hooks que Drupal a appelés jusqu'à ce point? La dernière est la façon dont j'ai lu la demande de @ chrisjlee.
mpdonadio

1
@MPD Il ne montrera pas seulement quels modules implémentent un hook mais aussi l'ordre dans lequel ils sont appelés. Si le contexte est ce qui se passe avant / après l'appel du hook de mon module, ce qui précède suffira. Si vous vouliez savoir si hook foo est appelé à un certain moment dans le flux d'exécution, ce sera assez difficile à comprendre, car Drupal est si complexe. Surtout pour un nouveau développeur. Je ne sais pas si c'est ce dont OP a besoin, mais c'est probablement plus utile que toutes les suggestions de xDebug de toute façon.
googletorp
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.