krumo()/ dpm()不起作用


8

我有一个自定义模块和一个模板,可以更改节点提交表单的外观,请参见以下说明

我的模块包含三个功能:

  • 一个hook_form_alter()效果很好
  • hook_theme()即使您之前输入了其他代码,A 也不执行任何操作,但是返回一个数组return(不确定这是否是设计使然)
  • 一个hook_preprocess_HOOK()是目前空

dpm()hook_preprocess_HOOK()尽管krumo()在相同的变量可以工作,但在中似乎什么也没做。它设置了一个Drupal消息,该消息可以读取,Array: [n] items但根本无法扩展或检查。

在我的模板中,print_r($form);按预期方式打印出表单数组。dpm('self-aware roomba');按预期设置Drupal消息“自我感知的Roomba”。但是dpm($form); 什么也不做,不会抛出任何错误。

除我以外的所有内容都hook_form_alter()与链接教程中显示的完全一样。我什至尝试将整个部分拉出来hook_form_alter(),看看是否没有它就可以工作。没有。

什么可能导致dpm()/ krumo()静默失败?


是否安装了Devel模块?DPM()来自杰韦利模块
穆罕默德·阿里·阿克巴里

是的,已安装Devel。dpm('self-aware roomba');否则将不起作用,krumo()也不会返回Array: [n] items,只会导致致命的PHP错误,这将导致我的日志不为空。
2012年

因此,请将您的代码放入您的问题中,然后让我重现错误;)
Mohammad Ali Akbari'Aug

它与链接教程中的代码完全相同。将其全部发布到问题窗口有点长。所有代码都在这里:drupal.org/node/1092122
beth,2012年

您在哪个函数(哪里)中尝试dpm()?
穆罕默德·阿里·阿克巴里

Answers:


6

我遇到了一个问题,其中的dpm()一些其他消息在后台被404请求吞噬了。

说明:

如果在用信息打印出消息之前调用dpm()或,那么您将在同一页面上看到它们。drupal_set_message()theme_status_messages()

如果dpm()或之后drupal_set_message()被调用theme_status_messages(),则这些消息会延迟$_SESSION到下一个发出的请求theme_status_messages()

某些类型的请求不会触发theme_status_messages()。例如,表单提交只会执行表单处理,然后进行重定向,因此消息仍保留在中$_SESSION

另外,它只会在同一位访问者/客户端的请求上触发(这就是为什么将其保存在会话中的原因,这是客户端特定的)。

但是,某些在后台发生的请求会触发theme_status_messages(),并且会吞噬您的消息。

在我的情况下,这是对丢失图像的请求,这导致包含消息的HTML 404页面完整(显然,我什么也没看到)。

解:

解决方案是激活“快速404”功能。


那是非常好的调试,做得很好。我的问题是我有一个SVG文件404ing,默认文件扩展名未涵盖该文件。感谢您的答复!
John McCollum 2014年

您的研究的主要支持者@zhilevan!Fast 404出于某种原因不能解决我这个问题,但这绝对是原因,因为修复404立即导致我的dpm()开始出现。
joe_flash

1

测试这个我的朋友

ob_start();
krumo($yourparameter);
$output = ob_get_contents();
ob_end_clean();
drupal_set_message($output);

这可行,但是我得到了同一日志消息的多个版本。如果我理解正确,那么所有要做的就是将输出收集在一起,然后通过php缓冲区渲染它?那正确吗?
marblegravy 2014年

@marblegravy是的,对
Yuseferi 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.