Получить экземпляр объекта, когда объект частично вызывается - PullRequest
0 голосов
/ 26 марта 2020

У меня есть страница, которая отображает информацию об одном фильме и предлагает оставить комментарий. Чтобы отобразить комментарии, указанные c к каждому фильму, я поступил следующим образом:

   /**
     * @Route("film/{id}", name="film")
     */
    public function film(FilmRepository $repo, EntityManagerInterface $em, Request $req, $id)
    {
        $film = $repo->find($id);

        $comments = $film->getComments();

        $comment = new Comment;
        $form = $this->createForm(CommentType::class);
        $form->handleRequest($req);

        if($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $comment->setAuthor($this->getUser());
            $comment->setFilm($id);
            $em->persist($comment);
            $em->flush();

        }





        return $this->render('film/film.html.twig', [
            'controller_name' => 'FilmController',
            'film' => $film,
            'comments' => [$comments],
            'form' => $form->createView()
        ]);
    }

Я думал, что передача переменной $ id (которую я получаю и которая соответствует идентификатору фильма) будет быть достаточным. Но я получаю сообщение об ошибке:

Аргумент 1, передаваемый в App \ Entity \ Comment :: setFilm (), должен быть экземпляром App \ Entity \ Film или нулевым целым числом, вызываемым в /home/""""/projet-film2/src/Controller/FilmController.php в строке 61

Ошибка довольно очевидна и говорит сама за себя. Мне нужно создать экземпляр нового объекта mov ie, получить его идентификатор mov ie -> getId () и передать его в качестве параметра-установщика. Но поскольку фильм уже создан здесь, это может усложнить ситуацию, верно? Есть ли способ обойти эту проблему иначе, чем создание экземпляров?

1 Ответ

1 голос
/ 26 марта 2020

Решение было просто ввести зависимость , а затем передать ее установщику:

   /**
     * @Route("film/{id}", name="film")
     */
    public function film(FilmRepository $repo, Film $film, EntityManagerInterface $em, Request $req, $id)
    {
        $filmRepo = $repo->find($id);

        $comments = $filmRepo->getComments();

        $comment = new Comment;
        $form = $this->createForm(CommentType::class, $comment);
        $form->handleRequest($req);

        if($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $comment->setAuthor($this->getUser());
            $comment->setFilm($film);

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

        }

        return $this->render('film/film.html.twig', [
            'controller_name' => 'FilmController',
            'film' => $film,
            'comments' => [$comments],
            'form' => $form->createView()
        ]);
    }
...