Сортировка в шаблоне, в Symfony2: использование Twig для сортировки коллекции объектов по свойству - PullRequest
10 голосов
/ 25 августа 2011

В проекте Symfony2 у меня есть контроллер, который извлекает ряд инцидентов из базы данных.Эти инциденты имеют такие свойства, как start_time, stop_time, type и т. Д.

На мой взгляд, я хочу показать эти инциденты в таблице, отсортированной по start_time.Я использую Twig для своих шаблонов.

Я могу предварительно отсортировать в своем контроллере перед передачей его в шаблон Twig, но imho контроллеру не должно быть важно, что представление хочет его отсортировать.Может быть, другой шаблон, который я создаю, захочет отсортировать его по типу, например.

Теперь, есть ли способ, которым я могу передать коллекцию объектов-инцидентов как есть шаблону Twig и отсортировать егоэто для меня на месте?Может быть с '|сортировать 'фильтр, но затем с чем-то вроде' |свойство (start_time) 'перед ним, если вы понимаете, что я имею в виду: -)

Любой совет приветствуется, заранее спасибо!

Дитер

Ответы [ 2 ]

15 голосов
/ 26 августа 2011

Нет способа отсортировать массив по свойству с помощью Twig.У вас все еще есть фильтр sort (описанный здесь: http://twig.sensiolabs.org/doc/filters/sort.html), но он просто отсортирует ваш массив, как php сделает с функцией sort.

Что вы можете сделать, это создать TwigExtensionи внедрите свой собственный фильтр. Это очень легко и очень хорошо задокументировано здесь: http://twig.sensiolabs.org/doc/advanced.html

3 голосов
/ 06 ноября 2016

futurecat абсолютно прав: нет способа сделать это «из коробки». Даже если его ответ принят, я добавляю его для полноты:

Вы можете использовать snilius / twig-sort-by-field Расширение Twig, которое обеспечит необходимый вам фильтр.

Установите его, используя composer require snilius/twig-sort-by-field, и наслаждайтесь sortbyfield фильтром:

{% for item in base | sortbyfield('name') %}
    {{ item.name }}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...