在Drupal7中,我们可以使用devel模块中的kpr()
或者php的print_r()
和var_dump()
函数来打印node.tpl文件中的$node对象,或者挂钩预处理节点,以便调试和查找字段或..
但是在Drupal8中,我们不能在twig中使用php函数,我尝试了kint()
和dump()
来打印twig中的节点,但是没有成功。(我已经在services.yml中设置了debug: true
)(更多细节: twig文件中的kint(node)
会造成无限循环,并导致浏览器中的内存空间耗尽)。
因此,问题是如何在Drupal8中使用twig或hook预处理节点打印节点对象?
Q更新1.0版:
我有一个自定义的twig模板,它可以很好地工作:
<article>
<div>
{{ content.body|render }} {# this works #}
</div>
<footer>
{{ kint(node.field_custom.value) }} {# prints the custom field value without any problem #}
{{ kint(node) }} {# this causes infinite loop and memory issue #}
{{ content }} {# prints all content fields without any problem #}
{{ kint(content) }} {# nothing happen or display with this! #}
{{ kint(label) }} {# infinite like node #}
</footer>
发布于 2020-03-03 17:15:19
我知道kint()
函数不是问题所在,因为它显示了我为测试而创建的自定义数组和对象。所以问题出在节点对象本身。它非常大,并且使用kint()
打印它会产生内存限制问题。当我在php.ini
文件中将内存限制更改为-1 memory_limit= -1
进行测试时,它占用了我系统中所有的16‘t内存,这是不够的!
因此,我将kint()
函数在modules/devel/kint/kint/config.default.php
( $_kintSettings['maxLevels'] = 4;
)中的深度从7减少到4,并在php.ini
中将memory_limit=128M
函数的深度减少到4。
现在一切都正常了,希望它能帮助别人。
发布于 2020-07-09 21:56:42
另一种选择是使用VarDumper module,它不像Kint那样占用大量内存。我发现它对用户更友好,而且更好看!
function YOURTHEME_preprocess_node(&$variables){
vardumper($variables);
}
发布于 2020-12-08 02:18:41
1-安装Devel + Twig VarDumper
2-在www.example.com/admin/config/development/devel
中
启用 Display $page阵列
3-在www.example.com/admin/config/development/devel
中
启用 Symfony变量转储程序
4-在细枝中添加
{{ dump() }} {# all #}
{{ dump(attributes) }} {# one #}
{{ dump(_charset) }} {# #}
https://stackoverflow.com/questions/60496226
复制相似问题