使用 Twig 宏时"Illegal offset type in isset or empty"



使用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线。显然,宏的工作正常,但是如果给出输出的输出未过滤,情况会丢失错误。添加任何过滤器,例如trimlower,都可以再次工作。

换句话说,这些工作:

  • {% 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

最新更新