я хочу удалить выбранную строку из таблицы html, которая отображает список заказов. это код таблицы:
{% for reservation in ListeDesReservations %}
<tr>
//columns ... //
<td class = "text-center text-lg text-medium">{{ reservation.seat}}</td>
<td class = "text-center text-lg text-medium">{{ reservation.getEvent().getPrix()}}</td>
{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %}
{% set url = absolute_url(asset('')) ~ 'app_dev.php/supprimerReservation/' ~ reservation.id %}
{% else %}
{% set url = "OTHER_URL" %}
{% endif %}
<td class = "text-center"><a href = "{{url}}" ></a></td>
</tr>
{% endfor %}
</tbody>
</table>
это мой метод удаления в контроллере:
public function SupprimerReservationAction($idReservation){
$em = $this->getDoctrine()->getEntityManager();
$entite = $em->getRepository('techeventBundle:reservation')->find($idReservation);
$em->remove($entite);
$em->persist($entite);
$em->flush();
//Affichage
$iduser = $this->getUser()->getId();
return $this->redirectToRoute('affichage', ['iduser' => $iduser]);
//Affichage
}
это мой файл маршрутизации:
affichage:
path: /afficherPanier/{iduser}
defaults: { _controller: reservationBundle:Default:afficherPanier }
supprimerReservation:
path: /supprimerReservation/{idReservation}
defaults: { _controller: reservationBundle:Default:SupprimerReservation }
проблема в том, что когда я нажимаю на ссылку удаления, она перенаправляет меня на ту же ссылку (app_dev.php/afficherPanier/2), в то время как он должен перенаправить меня на маршрут удаления (app_dev.php/supprimerReservation/27)
@ Сид, да, я ошибаюсь, это должно быть без комментариев! я скопировал неправильный код
@Cid, когда я удаляю (перенаправляю на URL-адрес), он перенаправляет меня на правильный URL-адрес /supprimer/27! думаю проблема в нем! вот почему я прокомментировал это
Это нормальное поведение. "он перенаправляет меня на ту же ссылку" -> return $this->redirectToRoute('affichage' ... ); Вы выполняете перенаправление в действии. Удаление прошло успешно?
Вы должны проверить профилировщик, чтобы заметить, что происходит, что было сделано, какие перенаправления и т. д.
нет, действие удаления не выполняется, даже если я успешно перенаправлен на маршрут удаления
$em->remove($entite);, а затем $em->persist($entite);. Вы удаляете и сохраняете его обратно, поэтому ваша сущность не удаляется. Удалите это persist@Cid это работает, спасибо, но мне пришлось удалить перенаправление на маршрут




Я бы предложил работать с аннотациями для маршрутов. Делает вещи проще.
То, что вы делаете, далеко не правильный путь.
Ваша функция удаления тоже не будет работать должным образом...
Вы удаляете с помощью $em->remove($entite), затем создаете с помощью $em->persist($entite).
Добром это точно не кончится.
Твоя веточка в беспорядке...
Мы не создаем URL так, как вы. Для этого есть расширение ветки path.
Я бы предложил начать читать о Symfony:
Сохранение/выборка/обновление/удаление объекта в базе данных
Ссылки выше относятся к Symfony 3.4.
Обязательно измените версию с помощью раскрывающегося списка на странице на соответствующую версию Symfony, если вы не используете Symfony 3.4.
я согласен, я все еще учусь, я постараюсь улучшить свой код, спасибо за ваш ответ.
В вашем действии контроллера вы делаете:
$em->remove($entite);
$em->persist($entite);
Вы удаляете, а затем сохраняете объект. Удалите строку $em->persist($entite);.
Ваше перенаправление является нормальным поведением, поскольку вы запрашиваете его в своем действии контроллера return $this->redirectToRoute('affichage', ['iduser' => $iduser]);
Примечание: это не то, как предполагается строить путь {% set url = absolute_url(asset('')) ~ 'app_dev.php/supprimerReservation/' ~ reservation.id %}
В Twig есть метод с именем path, который позволяет создавать URL-адреса на основе имени маршрута.
{% set url = path('supprimerReservation', {'idReservation': reservation.id }) %}
Зачем делать:
{% set url = absolute_url(asset('')) ~ 'app_dev.php/supprimerReservation/' ~ reservation.id %}(это может не сработать), когда можно просто написать:{% set url = path('supprimerReservation', {'idReservation': reservation.id }) %}