我正在尝试编写一个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中返回的集合是否已更改。
答案 0 :(得分:2)
这是因为您正在获取迭代器并对其进行排序
方法getIterator
创建一个新的ArrayIterator
,它会生成数组的副本
然后,您将返回未排序的集合。
Here is一些关于会发生什么的样本。
您只需要替换
return $collection;
通过
return $iterator;