krumo () / dpm () funktioniert nicht

8

Ich habe ein benutzerdefiniertes Modul und eine Vorlage das Aussehen meiner Knoten Anmeldeformulare, á la zu ändern , diese Anweisungen .

Mein Modul besteht aus drei Funktionen:

  • A hook_form_alter()das funktioniert gut
  • A hook_theme(), das nichts anderes tut, als ein Array zurückzugeben, selbst wenn Sie zuvor einen anderen Code eingegeben haben return(nicht sicher, ob dies beabsichtigt ist)
  • A hook_preprocess_HOOK(), das derzeit leer ist

dpm()scheint nichts zu tun hook_preprocess_HOOK(), obwohl krumo()mit den gleichen Variablen irgendwie funktioniert. Es wird eine Drupal-Nachricht festgelegt, die lautet, Array: [n] itemsaber nicht erweitert oder überprüft werden kann.

Druckt in meiner Vorlage print_r($form);das Formulararray wie erwartet aus. dpm('self-aware roomba');Setzt erwartungsgemäß eine Drupal-Nachricht von "selbstbewusstem Roomba". aber dpm($form); tut nichts und wirft keinen Fehler.

Alles außer meinem hook_form_alter()ist genau so, wie es im verlinkten Tutorial erscheint. Ich habe sogar versucht, das Ganze herauszuziehen, um hook_form_alter()zu sehen, ob es ohne es funktioniert. es tut nicht.

Was verursacht werden könnte dpm()/ krumo()still scheitern?

Beth
quelle
Ist das Entwicklungsmodul installiert? dpm () kommt vom Devel-Modul
Mohammad Ali Akbari
Ja, Devel ist installiert. dpm('self-aware roomba');würde sonst nicht funktionieren und krumo()nicht zurückkehren Array: [n] items, es würde nur einen schwerwiegenden PHP-Fehler verursachen, der dazu führen würde, dass meine Protokolle nicht leer sind.
Beth
Bitte geben Sie Ihren Code in Ihre Frage ein und lassen Sie mich die Fehler wiedergeben;)
Mohammad Ali Akbari
Es ist genau identisch mit dem Code im verknüpften Tutorial. Es ist ein bisschen lang, alles im Fragenfenster zu posten. Der gesamte Code ist hier: drupal.org/node/1092122
Beth
In welcher Funktion (wo) versuchst du dpm ()?
Mohammad Ali Akbari

Antworten:

6

Ich bin auf ein Problem gestoßen, bei dem dpm()und einige andere Nachrichten von einer 404-Anfrage im Hintergrund aufgefressen wurden.

Erläuterung:

Wenn dpm()oder drupal_set_message()aufgerufen wird, bevor die Nachrichten ausgedruckt werden theme_status_messages(), werden sie auf derselben Seite angezeigt.

Wenn dpm()oder danach drupal_set_message()aufgerufen wird theme_status_messages(), werden diese Nachrichten $_SESSIONbis zur nächsten Anforderung verzögert theme_status_messages().

Einige Arten von Anforderungen werden NICHT ausgelöst theme_status_messages(). Beispielsweise führt eine Formularübermittlung nur die Formularverarbeitung und anschließend eine Umleitung durch, sodass die Nachrichten in der Form verbleiben $_SESSION.

Außerdem wird es nur bei Anfragen desselben Besuchers / Kunden ausgelöst (aus diesem Grund wird es in einer Sitzung gespeichert, die kundenspezifisch ist).

Einige Anforderungen, die im Hintergrund auftreten, werden jedoch ausgelöst theme_status_messages()und können Ihre Nachrichten verschlingen.

In meinem Fall handelte es sich um Anfragen nach fehlenden Bildern, was zu vollständigen HTML 404-Seiten MIT Nachrichten führte (und ich habe offensichtlich nichts davon gesehen).

Lösung:

Die Lösung bestand darin, die Funktion "fast 404" zu aktivieren.

Donquijote
quelle
Das ist ein wirklich schönes Stück Debugging, gut gemacht. Mein Problem war, dass ich eine SVG-Datei 404ing hatte, die in den Standarddateierweiterungen nicht behandelt wurde. Danke für eine tolle Antwort!
John McCollum
Wichtige Up-Votes für Ihre Forschung, @zhilevan! Fast 404 hat dies aus irgendeinem Grund nicht für mich gelöst, aber dies war definitiv die Ursache, da das Beheben der 404s sofort dazu führte, dass meine dpm () angezeigt wurde.
Joe_Flash
1

Teste das, mein Freund

ob_start();
krumo($yourparameter);
$output = ob_get_contents();
ob_end_clean();
drupal_set_message($output);
Yusef
quelle
Dies funktioniert, aber ich erhalte mehrere Versionen derselben Protokollnachricht. Wenn ich das richtig verstehe, müssen Sie nur die Ausgabe sammeln und dann über einen PHP-Puffer rendern. Ist das richtig?
Marblegravy
@ Marmorgravy ja, richtig
Yusef