krumo () / dpm () ne fonctionne pas

8

J'ai un module personnalisé et un modèle pour modifier l'apparence de mes formulaires de soumission de nœuds, à la suite de ces instructions .

Mon module comprend trois fonctions:

  • Un hook_form_alter()qui fonctionne bien
  • Un hook_theme()qui ne fait rien d'autre que renvoyer un tableau, même si vous entrez un autre code avant return(pas sûr que ce soit par conception)
  • A hook_preprocess_HOOK()qui est actuellement vide

dpm()ne semble pas faire quoi que ce soit dans hook_preprocess_HOOK(), bien que krumo()sur les mêmes variables genre de travaux. Il définit un message Drupal qui lit Array: [n] itemsmais ne peut pas être développé ou inspecté du tout.

Dans mon modèle, print_r($form);imprime le tableau de formulaires comme prévu. dpm('self-aware roomba');définit un message Drupal de "roomba conscient de soi" comme prévu. mais dpm($form); ne fait rien et ne lance aucune erreur.

Tout sauf mon hook_form_alter()est exactement comme il apparaît dans le tutoriel lié. J'ai même essayé de retirer l'ensemble hook_form_alter()pour voir si cela fonctionne sans lui; ce n'est pas le cas.

Qu'est-ce qui pourrait causer dpm()/ krumo()échouer silencieusement?

beth
la source
le module Devel est-il installé? dpm () provient du module Devel
Mohammad Ali Akbari
Oui, Devel est installé. dpm('self-aware roomba');ne fonctionnerait pas autrement et krumo()ne reviendrait pas Array: [n] items, cela provoquerait juste une erreur PHP fatale, ce qui empêcherait mes journaux d'être vides.
beth
alors s'il vous plaît placez votre code dans votre question et laissez-moi reproduire les erreurs;)
Mohammad Ali Akbari
Il est exactement identique au code du didacticiel lié. C'est un peu long pour tout publier dans la fenêtre des questions. Tout le code est ici: drupal.org/node/1092122
beth
dans quelle fonction (où) vous essayez dpm ()?
Mohammad Ali Akbari

Réponses:

6

J'ai rencontré un problème où dpm()et certains autres messages ont été absorbés par une demande 404 en arrière-plan.

Explication:

Si dpm()ou drupal_set_message()est appelé avant que les messages soient imprimés avec theme_status_messages(), alors vous pouvez les voir sur la même page.

Si dpm()ou drupal_set_message()est appelé après theme_status_messages(), ces messages sont retardés $_SESSIONjusqu'à la prochaine demande theme_status_messages().

Certains types de demandes ne se déclenchent PAStheme_status_messages() . Par exemple, un formulaire soumis ne fera que le traitement du formulaire, puis fera une redirection, de sorte que les messages restent dans le $_SESSION.

En outre, il ne se déclenchera que sur les demandes du même visiteur / client (c'est pourquoi il est enregistré dans la session, qui est spécifique au client).

Cependant, certaines requêtes qui se produisent en arrière-plan se déclenchent theme_status_messages()et peuvent gruger vos messages.

Dans mon cas, il s'agissait de demandes d'images manquantes, ce qui a abouti à des pages HTML 404 à part entière AVEC des messages (et je n'ai pas pu voir tout cela, évidemment).

Solution:

La solution était d'activer la fonction "fast 404".

don Quichotte
la source
C'est un très bon débogage, bien fait. Mon problème était que j'avais un fichier SVG 404ing, qui n'était pas couvert par les extensions de fichier par défaut. Merci pour une excellente réponse!
John McCollum
Major vote positif pour votre recherche, @zhilevan! Le Fast 404 n'a pas résolu cela pour moi pour une raison quelconque, mais c'était certainement la cause, car la correction des 404 a instantanément fait apparaître mon dpm ().
joe_flash
1

tester cela mon ami

ob_start();
krumo($yourparameter);
$output = ob_get_contents();
ob_end_clean();
drupal_set_message($output);
Yuseferi
la source
Cela fonctionne, mais j'obtiens plusieurs versions du même message de journal. Si je comprends bien, tout cela consiste à rassembler la sortie et à la restituer via un tampon php? Est-ce correct?
marbregravy
@marblegravy oui, à droite
Yuseferi