Twig 迭代对象属性
我在 Twig 文档中读到,可以按以下方式循环访问关联数组:
{% for key, value in array %}
{{key}}
{{value}}
{% endfor %}
我想知道这是否也适用于stdClass类型的对象。
我本来希望Twig迭代对象的属性值,将属性名称作为键。相反,for 循环中包含的指令块根本不执行。
我在 Twig 文档中读到,可以按以下方式循环访问关联数组:
{% for key, value in array %}
{{key}}
{{value}}
{% endfor %}
我想知道这是否也适用于stdClass类型的对象。
我本来希望Twig迭代对象的属性值,将属性名称作为键。相反,for 循环中包含的指令块根本不执行。
您可以先将对象强制转换为数组。您可以构建自己的滤镜,将对象投射到数组。有关过滤器的更多信息,请访问:http://twig.sensiolabs.org/doc/advanced.html#filters
然后它可能看起来像这样:
{% for key, value in my_object|cast_to_array %}
要完成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 %}
完成,我希望它有帮助。从塔德克的指针。