同样的问题在这里,通过阅读代码,我注意到:
// Compute position if it is negative
if ($newPosition < 0) {
$newPosition += $this->maxPositions[$hash] + 2; // position == -1 => append at end of list
if ($newPosition < 0) $newPosition = 0;
}
(在SortableListener:141)
我想通过设置-1
的位置,它会被移动到列表的末尾。而-2
将把它倒数第二。
编辑:对不起,我回答得太快,我也想补充一下:
我不认为你需要限制自己的位置,SortableListener
将:
// Set position to max position if it is too big
$newPosition = min(array($this->maxPositions[$hash] + 1, $newPosition));
所以你的moveUp()
功能可能是(顺便说一句,你反向moveUp
和moveDown
?):
public function moveUp()
{
if ($this->position != 0) {
$this->position--;
}
}
public function moveDown()
{
$this->position++;
}
更新:后好了一些测试,事实证明,则存在功能中的错误。
setPosition(-1)
将把对象放在列表的末尾,但它会在位置上产生空隙。
我在这里重现它:https://github.com/l3pp4rd/DoctrineExtensions/pull/908
我希望这将是固定的。