2011-08-25 34 views
9

W projekcie Symfony2 mam kontroler, który pobiera pewną liczbę incydentów z bazy danych. Te incydenty mają właściwości takie jak czas_początkowy, czas_końcowy, typ itd.Sortowanie w szablonie, w Symfony2: używanie Twig do sortowania kolekcji obiektów według właściwości

Moim zdaniem, chcę pokazać te incydenty w tabeli, posortowane według czasu rozpoczęcia. Używam Twig do tworzenia szablonów.

Mogę wstępnie sortować w moim kontrolerze przed przekazaniem go do szablonu Twig, ale imho kontroler nie powinien przejmować się, że widok chce go posortować. Może inny szablon, który utworzę, będzie chciał na przykład posortować według typu.

A teraz, czy istnieje sposób, w jaki mogę przekazać kolekcję obiektów-incydentów, jak to jest, do szablonu Twig, i czy mogę to dla mnie posortować na miejscu? Może z "| sortuj 'filter, ale potem z czymś podobnym do' | przed filtrem właściwości (start_time), jeśli wiesz co mam na myśli :-)

Każda rada jest mile widziana, z góry dziękuję!

Dieter

Odpowiedz

2

futurecat ma całkowitą rację: nie ma sposobu, aby to zrobić natychmiast. Nawet jeśli jego odpowiedź została zaakceptowana, dodaję to do kompletności:

Możesz użyć rozszerzenia, co zapewni filtr, którego potrzebujesz.

zainstalować go za pomocą composer require snilius/twig-sort-by-field i cieszyć się jego sortbyfield filtr:

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

Nie mogę sam tego wypróbować, ale wydaje mi się, że dokładnie to, czego wtedy potrzebowałem. Oznaczy to jako odpowiedź od teraz. Dzięki tobie i @futurecat! – Dieter

15

Nie ma sposobu, aby posortować tablicę według właściwości z gałązką. Nadal masz filtr sort (opisany tutaj: http://twig.sensiolabs.org/doc/filters/sort.html), ale po prostu posortujesz tablicę tak, jak php zrobi z funkcją sort.

Co można zrobić, to utworzyć rozszerzenie Twig i zaimplementować własny filtr. Jest to bardzo łatwe i bardzo dobrze udokumentowane: http://twig.sensiolabs.org/doc/advanced.html

+0

to, co potrzebne, aby wiedzieć. Dzięki za wskazówkę na przedłużeniu! – Dieter

Powiązane problemy