Удалить строку из таблицы базы данных в symfony

я хочу удалить выбранную строку из таблицы 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)

Зачем делать: {% set url = absolute_url(asset('')) ~ 'app_dev.php/supprimerReservation/' ~ reservation.id %} (это может не сработать), когда можно просто написать: {% set url = path('supprimerReservation', {'idReservation': reservation.id }) %}

Cid 25.03.2019 10:00

@ Сид, да, я ошибаюсь, это должно быть без комментариев! я скопировал неправильный код

YassinovTrabajaa 25.03.2019 10:02

@Cid, когда я удаляю (перенаправляю на URL-адрес), он перенаправляет меня на правильный URL-адрес /supprimer/27! думаю проблема в нем! вот почему я прокомментировал это

YassinovTrabajaa 25.03.2019 10:03

Это нормальное поведение. "он перенаправляет меня на ту же ссылку" -> return $this->redirectToRoute('affichage' ... ); Вы выполняете перенаправление в действии. Удаление прошло успешно?

Cid 25.03.2019 10:03

Вы должны проверить профилировщик, чтобы заметить, что происходит, что было сделано, какие перенаправления и т. д.

Cid 25.03.2019 10:04

нет, действие удаления не выполняется, даже если я успешно перенаправлен на маршрут удаления

YassinovTrabajaa 25.03.2019 10:06
$em->remove($entite);, а затем $em->persist($entite);. Вы удаляете и сохраняете его обратно, поэтому ваша сущность не удаляется. Удалите это persist
Cid 25.03.2019 10:09

@Cid это работает, спасибо, но мне пришлось удалить перенаправление на маршрут

YassinovTrabajaa 25.03.2019 10:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
8
1 381
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я бы предложил работать с аннотациями для маршрутов. Делает вещи проще.

То, что вы делаете, далеко не правильный путь.

Ваша функция удаления тоже не будет работать должным образом...
Вы удаляете с помощью $em->remove($entite), затем создаете с помощью $em->persist($entite).
Добром это точно не кончится.

Твоя веточка в беспорядке...
Мы не создаем URL так, как вы. Для этого есть расширение ветки path.

Я бы предложил начать читать о Symfony:

Создание простой формы

Сохранение/выборка/обновление/удаление объекта в базе данных

Контроллеры

Ссылки выше относятся к Symfony 3.4.
Обязательно измените версию с помощью раскрывающегося списка на странице на соответствующую версию Symfony, если вы не используете Symfony 3.4.

я согласен, я все еще учусь, я постараюсь улучшить свой код, спасибо за ваш ответ.

YassinovTrabajaa 25.03.2019 11:18
Ответ принят как подходящий

В вашем действии контроллера вы делаете:

$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 }) %}

Другие вопросы по теме