2011-08-25 25 views
9

En un proyecto Symfony2 tengo un controlador que recupera una cantidad de incidentes de la base de datos. Estos incidentes tienen propiedades como start_time, stop_time, type, etc.Ordenando en la plantilla, en Symfony2: usando Twig para ordenar una colección de objetos por propiedad

En mi opinión, quiero mostrar estos incidentes en una tabla, ordenados por start_time. Yo uso Twig para mis plantillas.

Puedo ordenar previamente en mi controlador antes de pasarlo a la plantilla de Twig, pero en mi opinión al controlador no le debe importar que la vista lo quiera ordenar. Quizás otra plantilla que creo querrá ordenarla por tipo, por ejemplo.

Ahora, ¿hay alguna forma de que pueda entregar la colección de objetos incidentes tal como están a la plantilla de Twig, y hacer que me la clasifiquen en el acto? Quizás con un '| sort 'filter, pero luego con algo así como' | propiedad (tiempo_inicio) 'filtro en frente de él, si sabes lo que quiero decir :-)

Cualquier consejo es bienvenido, gracias de antemano!

Dieter

Respuesta

2

futurecat tiene toda la razón: no hay forma de hacer esto de fábrica. Incluso si su respuesta ha sido aceptada, estoy agregando esto para completar:

Puede usar snilius/twig-sort-by-field extensión Twig, que proporcionará el filtro que necesita.

instalarlo usando composer require snilius/twig-sort-by-field, y disfrutar de sus sortbyfield filtro:

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

Ya no puedo probarlo, pero parece ser exactamente lo que necesitaba en ese momento. Marcaré esto como la respuesta a partir de ahora. ¡Gracias a ti y a @futurecat! – Dieter

15

No hay manera de ordenar una matriz por una propiedad con la ramita. Todavía tiene el filtro sort (descrito aquí: http://twig.sensiolabs.org/doc/filters/sort.html) pero simplemente ordenará su matriz como lo hará php con la función sort.

Lo que puedes hacer es crear una TwigExtension e implementar tu propio filtro. Es muy fácil y está muy bien documentado aquí: http://twig.sensiolabs.org/doc/advanced.html

+0

Eso es lo que necesitaba saber. Gracias por el consejo sobre la extensión! – Dieter

Cuestiones relacionadas