У меня есть сущность Product
. Каждый продукт может иметь 0 или N изображений. У меня есть объект ProductPhoto
, у которого есть свойство order
(0 = первое).
На странице я перечисляю все изображения моего текущего продукта. Я хотел бы управлять порядком изображений с помощью 2 стрелок вверх/вниз.
Когда пользователь нажимает на стрелку, она перемещается вверх/вниз по изображению по сравнению с другими.
Итак, на каждой стрелке есть ссылка, соответствующая действию маршрута в моем ProductController
.
Не очень сложно обновить только порядок перемещенного изображения, но я не знаю, как обновить порядок других изображений в ArrayCollection...
/**
* Manage picture order
*
* @Route("/products/{id}/photos/{idphoto}/move-{direction}", name="prod_move_photo")
*/
public function movePhotoAction($id, $idphoto, $direction, Request $request) {
$em = $this->getDoctrine()->getManager();
$photo = $em->getRepository('AppBundle:ProductPhoto')->find($idphoto);
if ($direction == 'up') {
$order = $photo->getOrder() - 1;
if ($order >= 0)
$photo->setOrder($order);
else
$photo->setOrder(0);
} elseif ($direction == 'down') {
$order = $photo->getOrder() + 1;
$photo->setOrder($order);
} else {
throw $this->createNotFoundException("The type of ordering '" . $direction . "' doesn't exist.");
}
$em->flush();
// redirection
return $this->redirectToRoute('prod_photos', array('id' => $id));
}
Может быть, используя PHP uksort()
?