Twig 迭代对象属性

2022-08-30 16:02:46

我在 Twig 文档中读到,可以按以下方式循环访问关联数组:

{% for key, value in array %}  
 {{key}}  
 {{value}}  
{% endfor %}  

我想知道这是否也适用于stdClass类型的对象。

我本来希望Twig迭代对象的属性值,将属性名称作为键。相反,for 循环中包含的指令块根本不执行。


答案 1

您可以先将对象强制转换为数组。您可以构建自己的滤镜,将对象投射到数组。有关过滤器的更多信息,请访问:http://twig.sensiolabs.org/doc/advanced.html#filters

然后它可能看起来像这样:

{% for key, value in my_object|cast_to_array %}

答案 2

要完成Tadeck的答案,这里是如何做到的:

如果您从未创建或设置过Twig扩展(过滤器),则需要先按照以下说明进行操作 http://symfony.com/doc/2.7/cookbook/templating/twig_extension.html

1)添加到您的AppBundle/Twig/AppExtension.php(“cast_to_array”)

public function getFilters()
{
    return array(
        new \Twig_SimpleFilter('md2html', array($this, 'markdownToHtml'), array('is_safe' => array('html'))),
        new \Twig_SimpleFilter('price', array($this, 'priceFilter')),
        new \Twig_SimpleFilter('cast_to_array', array($this, 'objectFilter')),
    );
}

2)添加到您的AppBundle/Twig/AppExtension.php

public function objectFilter($stdClassObject) {
    // Just typecast it to an array
    $response = (array)$stdClassObject;

    return $response;
}

3)在你的例子中.html.twig循环与twig和过滤器。

{% for key, value in row|cast_to_array %}
       <td id="col" class="hidden-xs">{{ value }}</td>
{% endfor %}

完成,我希望它有帮助。从塔德克的指针。


推荐