我已将Symfony1 Cookbook http://symfony.com/legacy/doc/cookbook/1_2/en/sortable的这一条目重写为Symfony2。我的第一个目标是经典的可排序列表:
所有文档(MongoDB)都有一个位置字段,它是整数类型,并显示它们的顺序。
我已经创建了一个服务类Sortable,其中有以下方法:
class Sortable
{
//Return the position of the document
public function getByPosition($position = 1, $document, $site, $item = null){ /**/ }
//Return all elements sorted by position
public function getAllByPosition($document, $site){/**/}
//Return the max position of the items within a parent item
public function getMaxPosition($document, $site, $parent = null){/**/}
//Swap the position between $itemOne and $itemTwo
public function swapWith($itemOne, $itemTwo, $document){/**/}
//Set the new position => +1
public function executeUp($document, $id){/**/}
//Set the new position => -1
public function executeDown($document, $id){/**/}
//Persist document with the new position
public function save($item, $document){/**/}
}
这很好但主要问题是这个类很难重复使用。
- $ document var是数据库中的文档名称,例如在 createQueryBuilder('MyBundle'。$ document)
上使用- $ site var是我的应用的网站,因为每个用户都有一个网站。
- $ parent var的类型为$ document,它是相同类型文档的父级。
问题对我来说,这几乎不可重用,我要在控制器操作中调用上面的所有方法,然后检查Twig模板中的位置。我想实现一个twig扩展,它调用我的服务并完成我在控制器和twig中所做的所有逻辑。此外,它适用于任何文档。
我怎么能得到这个?