【问题标题】:Sorting in the template, in Symfony2: using Twig to sort a collection of objects by property在模板中排序,在 Symfony2 中:使用 Twig 按属性对对象集合进行排序
【发布时间】:2011-11-03 23:35:04
【问题描述】:

在 Symfony2 项目中,我有一个从数据库中检索大量事件的控制器。这些事件具有 start_time、stop_time、类型等属性。

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

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

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

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

节食

【问题讨论】:

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


    【解决方案1】:

    futurecat 是完全正确的:没有办法做到开箱即用。即使他的回答已被接受,为了完整起见,我还是添加了这个:

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

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

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

    【讨论】:

    • 我自己不能再尝试了,但这似乎正是我当时所需要的。从现在开始将其标记为答案。感谢您和@futurecat!
    【解决方案2】:

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

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

    【讨论】:

    • 这就是我需要知道的。感谢您提供有关扩展的提示!
    • 你还有树枝扩展链接吗?链接无法正常工作:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多