在模板中排序,在Symfony2中:使用Twig按属性对对象集合进行排序

时间:2011-08-25 19:08:57

标签: model-view-controller templates view symfony twig

在Symfony2项目中,我有一个控制器,可以从数据库中检索许多事件。这些事件具有start_time,stop_time,type等属性。

在我看来,我想在一个表中显示这些事件,按start_time排序。我使用Twig作为我的模板。

我可以在将其传递给Twig模板之前对我的控制器进行预先排序,但是控制器不应该关心视图是否要对其进行排序。也许我创建的另一个模板会希望按类型排序,例如。

现在,有没有办法可以将事件对象的集合按原样提供给Twig模板,并让它在现场为我排序? 也许用'|排序'过滤,但后来用'| property(start_time)'在它前面过滤,如果你知道我的意思: - )

欢迎任何建议,谢谢!

迪特

2 个答案:

答案 0 :(得分:15)

无法使用Twig按属性对数组进行排序。您仍然拥有sort过滤器(此处描述:http://twig.sensiolabs.org/doc/filters/sort.html),但它只会对您的数组进行排序,就像php将使用sort函数一样。

您可以做的是创建一个TwigExtension并实现您自己的过滤器。这里非常容易并且有很好的文档记录:http://twig.sensiolabs.org/doc/advanced.html

答案 1 :(得分:3)

未来猫是完全正确的:开箱即用是没有办法做到这一点的。即使他的答案已经被接受,我也是为了完整性而加上这个:

您可以使用snilius/twig-sort-by-field Twig扩展程序,它将提供您需要的过滤器。

使用composer require snilius/twig-sort-by-field安装,并享受其sortbyfield过滤器:

{% for item in base | sortbyfield('name') %}
    {{ item.name }}
{% endfor %}