我有一个树枝模板使用Symfony 3像follwing:
{% if app.environment == 'dev' %}
{{ dump(students) }}
{% endif %}
但在'prod'环境中,它会抛出此错误,显示在var/logs/prod.log文件中:
[2016-05-18 21:28:28]请求。关键:Uncaught PHP Exception Twig_Error_Error:“Unknown“dump”function in“search/search_pet_results.html.twig”at line 13.”at/var/www/html/petition/vendor/twig/lib/Twig/ExpressionParser.php line 573 {“exception”:“[object](Twig_Error_Error(code:0):Unknown \“dump\”function in \“search/search_pet_results.html.twig\”at line 13. at /var/www/html/petition/vendor/twig/lib/Twig/ExpressionParser.php:573)"} []
对我的小树枝模板有什么建议吗?不知道该尝试什么,因为这是“应该”工作。
3条答案
按热度按时间wgx48brx1#
如文档here中所述,dump函数默认不可用。您必须将debug标志设置为true才能在环境中启用。该标志位于config.yml文件中的twig部分下。通常该值取自内核值。
因此,您的config.yml可能与以下内容相同:
config.yml
尝试修改如下,以便在所有环境中启用:
config.yml
希望这对你有帮助
cwxwcias2#
prod环境中出现错误,因为转储调用不可用。
但是您不需要将debug设置为true,因为您通常不希望在prod环境中这样做。
对于这个问题,有一个非常简单和更好的解决方法。
而不是直接在if块中调用
dump()
,只是包含一个单独的包含dump()
调用的twig文件。变更:
进入:
dump.html.twig content:
hs1ihplo3#
这类似于我最近回答的问题检查是否存在自定义Twig函数,然后调用它。我发现Twig在尝试调用不存在的函数时抛出
Twig_Error_Syntax
异常,即使它位于无法访问的if
块中。就像你的问题一样。其实Symfony's documentation of dumping也是这么说的:
根据设计,
dump()
函数仅在dev
和test
环境中可用,以避免在生产中泄漏敏感信息。实际上,尝试在prod
环境中使用dump()
函数将导致PHP错误。因此,要么从Twig文件中删除所有
dump
,要么创建一个解决方案。我希望
dump
在生产环境中不做任何事情-所以我会创建一个名为dump
的自定义Twig函数,它不返回任何东西。遗憾的是,我不知道你应该在代码库的哪个位置添加一个只在生产环境中使用的新函数。
然后,您可以在所有环境中安全地使用
dump
;在生产环境中,它只是不输出任何内容,而且也不会抛出异常。