Drupal中alter钩子内dpm无输出?var_dump却正常工作
dpm($form)没输出,但var_dump($form)正常? 作为常年跟Drupal调试打交道的人,我碰到过好几次这种情况,给你列几个最可能的原因:
Devel模块没启用(或者没装)
dpm()是Devel模块特有的调试工具,PHP本身没这个函数。如果你的站点没安装Devel,或者装了但没在模块列表里启用,那这个函数相当于没执行,自然看不到输出。而var_dump()是PHP原生函数,不管啥情况都能直接输出内容。先去模块管理页面确认Devel是不是已经开了。缓存搞的鬼
Drupal的缓存机制有时候会“吃掉”调试输出。如果你的站点开了页面缓存、渲染缓存,dpm()的输出可能被缓存压制——毕竟它是输出到Drupal的消息系统里,而var_dump()是直接怼到输出缓冲区里,不受缓存影响。可以临时关掉性能设置里的页面缓存,或者在钩子函数开头加一行drupal_flush_all_caches();试试(别在生产环境这么搞!)。dpm()的输出区域被隐藏了
跟var_dump()直接打印在页面任意位置不同,dpm()的内容是输出到Drupal顶部的消息栏里。如果你的主题模板把$messages变量给删掉了,或者有其他模块屏蔽了调试类的消息,你就看不到它的输出。可以切换回默认主题(比如Bartik)试试,或者检查主题的page.tpl.php(或者Twig模板)里有没有保留消息区域。函数冲突被覆盖了
这种情况比较少见,但也有可能:如果你的自定义模块里自己写了个dpm()函数,或者其他第三方模块定义了同名函数,就会把Devel的dpm()给覆盖掉,导致它没法正常工作。可以试试用Devel的全名函数devel_print_object($form);代替dpm(),看看能不能出内容。
顺带提一句:你代码里修改$form['#submit']的操作和这个问题没关系,不用纠结它。
内容的提问来源于stack exchange,提问作者user9728810

