Debugging von Hooks, die ausgelöst wurden?


9

Ich bin etwas neu in der Modulentwicklung.

Gibt es eine Möglichkeit, aktuell auszugeben, welche Hooks auf bestimmten Knoten ausgeführt wurden?

Würde dies mit xdebug gemacht werden?

Antworten:


9

Wenn Sie keinen schwerwiegenden Fehler (oder leeren Bildschirm) erhalten, ist es ziemlich einfach, eine Liste der Module abzurufen, die aufgerufen werden, wenn ein spezieller Hook aufgerufen wird:

$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.

Sie könnten Dinge wie xDebug verwenden, um den Fluss des Drupal zu verfolgen, aber dies kann überwältigend sein, insbesondere wenn Sie Drupal noch nicht kennen.


1
Wenn Sie das Debuggen ausprobieren möchten und keine Stunden damit verbringen möchten, es einzurichten, können Sie Quickstart ausprobieren . Es ist eine virtuelle Maschine und mit drush ist es sehr einfach, eine Site einzurichten, dann in Ihr Modul einzufügen, in Netbeans zu importieren und auf Debug zu klicken.
Whisky

1
Würde dies nicht nur alle Module anzeigen, die einen bestimmten Hook implementieren, nicht alle Hooks, die Drupal bis zu diesem Punkt aufgerufen hat? Letzteres ist, wie ich @ chrisjlees Anfrage gelesen habe.
mpdonadio

1
@MPD Es wird nicht nur angezeigt, welche Module einen Hook implementieren, sondern auch die Reihenfolge, in der sie aufgerufen werden. Wenn der Kontext so ist, wie er vor / nach dem Aufruf des Hooks meines Moduls passiert, reicht das oben Genannte aus. Wenn Sie herausfinden möchten, ob Hook Foo zu einem bestimmten Zeitpunkt im Ausführungsablauf aufgerufen wird, ist es ziemlich schwierig, dies herauszufinden, da Drupal so komplex ist. Besonders für einen neuen Entwickler. Ich bin mir nicht sicher, ob dies das ist, was OP benötigt, aber es ist wahrscheinlich sowieso nützlicher als alle xDebug-Vorschläge.
googletorp
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.