Как мне получить идентификатор в URL-адресе для отображения комментариев с Symfony 5? - PullRequest
0 голосов
/ 26 мая 2020

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

Подводя итог: - У меня есть представление "/ fiche / {id} "wi sh отображает конкретную c информацию об игре. - Люди могут оставлять комментарии ниже, комментарий помещается в базу данных с внешним ключом с именем "jeu_id" wi sh - это игра, в которой был опубликован комментарий.

  • Цель состоит в том, чтобы отобразить сейчас все комментарии с sh были размещены на этой конкретной c игре. Я хочу отобразить все комментарии с внешним ключом «jeu_id», где sh находится в URL-адресе «/fiche/{id}".

. Вот метод в моем контроллере:

     /**
     * @Route("/fiche/{id}", name="fiche", methods={"POST", "GET"})
     */
    public function fiche($id, Jeux $jeux, Request $request): Response
    {
        $id = (int)$request->get('id');
        $commentaires = $this->getDoctrine()->getRepository(Jeux::class)->find($id);

        $commentaire = new Commentaires();
        $commentaire->setCreatedAt(new \DateTime("NOW"));
        $request = Request::createFromGlobals();
        $commentaire->setJeu($jeux);
        $form = $this->createForm(CommentairesType::class, $commentaire);
        $form->handleRequest($request);

        //test variable
        //dd($id);
        dd($commentaire->getJeu($id));

        if ($form->isSubmitted() && $form->isValid()) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($commentaire);
            $entityManager->flush();

            return $this->redirectToRoute('liste');
        }
        return $this->render('main/fiche.html.twig', [
            'commentaires' => $commentaires,
            'jeux' => $jeux,
            'form' => $form->createView(),
        ]);
    }

Вот важные переменные в сущности «Commentaires»:

    /**
     * @ORM\ManyToOne(targetEntity=Jeux::class, inversedBy="commentaires")
     * @JoinColumn(name="jeu_id", referencedColumnName="id")
     * @ORM\JoinColumn(nullable=true)
     */
    private $jeu;

    public function getJeu(): ?Jeux
    {
        return $this->jeu;
    }

    public function setJeu($jeu): self
    {
        $this->jeu = $jeu;

        return $this;
    }

Вот важные переменные в сущности «Jeux»:

    /**
     * @ORM\OneToMany(targetEntity=Commentaires::class, mappedBy="jeu", orphanRemoval=true)
     */
    private $commentaires;

    /**
     * @return Collection|Commentaires[]
     */
    public function getCommentaires(): Collection
    {
        return $this->commentaires;
    }

1 Ответ

1 голос
/ 26 мая 2020

Я думаю, что правильный путь будет примерно таким:

/**
 * @Route("/fiche/{jeux}", 
 * name="fiche"
 */
public function fiche(Request $request, Jeux $jeux, EntityManagerInterface $em): Response
{
    $form = $this->createForm(CommentaireType::class);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $commentaire = $form->getData();
        $commentaire->setCreatedAt(new \DateTime("NOW"));
        $jeux->addCommentaire($commentaire);

        $em->persist($commentaire);
        $em->flush();

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

    return $this->render('main/fiche.html.twig', [
        'commentaires' => $jeux->getCommentaires(),
        'jeux' => $jeux,
        'form' => $form->createView(),
    ]);
}
...