同樣的問題在這裏,通過閱讀代碼,我注意到:
// 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
我希望這將是固定的。