Почему заголовок URL принимает неправильный параметр? - PullRequest
0 голосов
/ 31 марта 2020

В системе комментариев CRUD, которую я добавляю к сообщениям, у меня нет проблем с изменением / удалением указанного комментария путем получения сообщения идентификатора и комментария. Вот метод, который используется (который также используется для создания комментария):

   /**
     * @Route("{id}/create", name="createComment")
     * @Route("{id}/{comment}/modif", name="modifComment", defaults={"comment"=1}, methods="GET|POST")
     */
    public function modification(FilmRepository $film, Comment $comment = null, Request $req, EntityManagerInterface $em, $id) 
    {
        if(!$comment) {
            $comment = new Comment();
        }

        $film = $em->getRepository(Film::class)->findOneBy(array('id' => $id)); 
        $user = $this->getUser();
        $form = $this->createForm(CommentType::class, $comment);
        $form->handleRequest($req);

        dump($film);
        dump($comment);

        if($form->isSubmitted() && $form->isValid()) {
            $comment->setAuthor($user);
            $comment->setFilm($film);
            $comment->setCreatedAt(new \DateTime());
            $em->persist($comment);
            $em->flush();

            $this->addFlash('success', 'L\'action a bien été effectuée');

            return $this->redirectToRoute('home');
        }

        return $this->render('comment/modif.html.twig', [
            "comment" => $comment,
            "form" => $form->createView()
        ]);
    }

Проблема возникает, когда я пытаюсь создать новый комментарий. Когда меня направляют в форму, он считает, что идентификатор записи соответствует идентификатору комментария (например, если я нахожусь в записи 1 и хочу добавить комментарий, он переносит меня в форму комментария 1). Однако я указал в своем запросе на веточку (в отличие от изменения), что я взял только параметр film.id:

{# Modif comment, with two parameters, functionnal#}
<a href="{{path('modifComment', {'id' : film.id, 'comment' : comment.id})}}">Modif</a>

{# Add comment, with one parameter, unfunctionnal#}
<a href="{{path('createComment', {'id' : film.id})}}">Add</a>

Я использовал тот же код, что и для CRUD моих сообщений , и все же он, когда я хочу создать новый пост, возвращает мне пустую форму:

   /**
     * @Route("/admin/create", name="createFilm")
     * @Route("/admin/{id}", name="modifFilm", methods="GET|POST")
     */
    public function modification(Film $film = null, Request $req, EntityManagerInterface $em) 
    {
        if(!$film) {
            $film = new Film();
        }

        $form = $this->createForm(FilmType::class, $film);
        $form->handleRequest($req);

        if($form->isSubmitted() && $form->isValid()) {
            $em->persist($film);
            $em->flush();

            $this->addFlash('success', 'L\'action a bien été effectuée');

            return $this->redirectToRoute('admin');
        }

        return $this->render('admin/modif.html.twig', [
            "film" => $film,
            "form" => $form->createView(),
            "admin" => true
        ]);
    }

Таким образом, проблема исходит от URL-адреса, который принимает идентификатор фильма, а интерпретирует как идентификатор комментария, но я не понимаю что является причиной ?

1 Ответ

0 голосов
/ 01 апреля 2020

В вашей функции publi c у вас есть Comment $comment. Вы даете два аргумента для вашего маршрута: id и comment

Paramconverter попытается найти правильный комментарий с тем, что вы ему дали (идентификатор и комментарий). Он не будет проверять, откуда берется значение в вашем файле ветки.

Действительно, если ваш аргумент id исходит из film.id, Paramconverter выдаст вам неправильный comment.

Что вам нужно сделать, это отправить comment.id на аргумент id.

Вы можете изменить свой маршрут следующим образом:

@Route("{film}/{id}/modif

Для своей ветки:

<a href="{{path('modifComment', {'id' : comment.id, 'film' : film.id})}}">Modif</a>
...