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

Die*_*ter 10 model-view-controller templates view symfony twig

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

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

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

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

欢迎任何建议,提前谢谢!

迪特

小智 15

无法使用Twig按属性对数组进行排序.你仍然有sort过滤器(在这里描述:http://twig.sensiolabs.org/doc/filters/sort.html),但它只会像你对该sort函数那样排序你的数组.

你可以做的是创建一个TwigExtension并实现自己的过滤器.这里很容易记录:http://twig.sensiolabs.org/doc/advanced.html


Que*_* S. 3

futurecat 是完全正确的:没有办法开箱即用地做到这一点。即使他的答案已被接受,我也会添加以下内容以确保完整性:

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

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

{% for item in base | sortbyfield('name') %}
    {{ item.name }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)