2013-08-14 3 views
1

Я пытаюсь написать фильтр Twig, чтобы иметь возможность сортировать Doctrine ArrayCollection, но возвращаемый массив не отсортирован :(Можете ли вы помочь мне исправить это:расширение Twig для сортировки Doctrine ArrayCollection

class SortExtension extends \Twig_Extension 
{ 

    public function getFilters() 
    { 
     return array(
      new \Twig_SimpleFilter('sortby', array($this, 'sortByFilter')), 
     ); 
    } 

    public function sortbyname($a, $b) 
    {  
     if ($a->getName() === $b->getName()) { 
      return 0; 
     } 
     if ($a->getName() < $b->getName()) { 
      return 1;     
     } 
     return -1; 
    } 

    public function sortByFilter($collection) 
    { 
     $iterator = $collection->getIterator(); 
     $iterator->uasort(array($this, 'sortbyname')); 

     return $collection; 
    } 

Я не совсем уверен, что если возвращаемая коллекция в sortByFilter изменяется.

ответ

2

Это потому, что вы получаете итератор и его сортировку.
метод getIterator создает новый ArrayIterator, который делает копию массива.
Затем вы возвращаете коллекцию, которая не сортируется.

Here is немного образец того, что происходит.

Вы просто должны заменить

return $collection; 

По

return $iterator; 
+0

Большое спасибо за быстрый ответ и хороший объяснение! :) – Faery