使用 Grav v1.3.8(在 PHP 5.6.30 上运行),在尝试渲染使用宏的 Twig 模板时,我当前遇到服务器错误(“isset 中的偏移类型非法或为空” )。
有趣的是,这只发生在我单独使用宏时。一旦我添加了一个过滤器,比如trim
,一切都会按预期工作。
(缩短的)宏文件,helpers.twig
:
{% macro ascii(str) %}
{% spaceless %}
{{ str|replace({
'Á': 'A',
'À': 'A',
'Â': 'A',
'Ã': 'A',
....
'ƒ': 'f'
})
}}
{% endspaceless %}
{% endmacro ascii %}
模板(MCVE):
{% import 'macros/helpers.twig' as helpers %}
{% set img = helpers.ascii('günter-berger.jpg') %}
{% if page.media[img] is defined %}
<img src="{{ page.media[img].url }}">
{% endif %}
这将产生错误。我把它缩小到这if
条线。显然,宏工作正常,但如果输入未过滤的输出,条件将引发错误。添加任何过滤器,如trim
or lower
,将使其再次工作。
换句话说,这些工作:
{% if page.media['günter-berger.jpg'] is defined %}
{% if page.media[helpers.ascii('günter-berger.jpg')|trim] is defined %}
但这会引发错误:
{% if page.media[helpers.ascii('günter-berger.jpg')] is defined %}
然而,在 twigfiddle 上尝试同样的事情,这三个似乎都在那里工作。
也许是 Grav 的问题?有人可以指出任何可能的原因吗?