使用GRAV V1.3.8(在PHP 5.6.30上运行),我目前会遇到服务器错误(" 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
或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上尝试了同一件事,这三个似乎在那里工作。
也许是坟墓的问题?有人可以指出任何可能的原因吗?
我忘记了这个,但是宏不返回字符串,而是返回Twig_Markup
{% set test = macro.ascii('Ghünter.jpg') %}
{{ dump(test) }}
输出:object(Twig_Markup)#10679 (2) { ["content":protected]=> string(11) "Ghunter.jpg" ["charset":protected]=> string(5) "UTF-8" }
因为返回类型是一个对象,因此您无法将对象用作index
。通过在此实例上使用过滤器,将调用magic method
__toString
方法,从而使其返回字符串,从而使其可用为 index
,用于数组
唯一的是绕过这一点,是编写filter
而不是macro