首页 > 解决方案 > @ParamConverter 注释找不到 App\Entity\Site 对象

问题描述

我正在尝试在 symfony 的项目中创建一个新的模板来放置一个攀爬转换器。但它不起作用。我有错误:

App\Entity\Site object not found by the @ParamConverter annotation

我将函数放在实体“站点”中,如下所示:

/**
 * @Route("/site")
 */
class SiteController extends AbstractController
{
 
    public function upload( KernelInterface $kernel): Response
    {
 
       $imagesDir = $kernel->getProjectDir().'/public/uploads'; // équivalent à $this->getParameter('images_directory')
       dump($imagesDir) ;
        return $this->render('site/show.html.twig');
    }
    /**
     * @Route("/", name="site_index", methods={"GET"})
     */
    public function index(SiteRepository $siteRepository): Response
    {
        
        return $this->render('site/index.html.twig', [
            'sites' => $siteRepository->findAll(),
              
        ]);
        
    }

    /**
     * @Route("/new", name="site_new", methods={"GET","POST"})
     */
    public function new(Request $request): Response
    {
        $site = new Site();
        $form = $this->createForm(SiteType::class, $site);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            //on recupère les medias transmises
            $media = $form->get('site')->getData();
            //on boucle sur les medias 
            foreach($media as $medi){
                //on génère un nouveau nom de fichier
                $fichier = md5(uniqid()) . '.' . $medi->guessExtension();
                //on copie le fichier dans le dossier img
                $medi->move(
                    $this->getParameter('images_directory'),
                    $fichier
                );
                //on stocke l'image dans la bdd
                $img = new Media();
                $img->setNom($fichier);
                $site->addMedium($img);

            }

            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($site);
            $entityManager->flush();

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

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

    /**
     * @Route("/{id}", name="site_show", methods={"GET"})
     */
    public function show(Site $site, MediaRepository $mediarepository, $id): Response
    {
        $media = $mediarepository->findBy(
            ['site'=>$id]
        );

        return $this->render('site/show.html.twig', [
            'site' => $site,
            'media' => $media,

        ]);
    }

    /**
     * @Route("/{id}/edit", name="site_edit", methods={"GET","POST"})
     */
    public function edit(Request $request, Site $site): Response
    {
        $form = $this->createForm(SiteType::class, $site);//j'appelle le form
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            //on recupère les medias transmises
            $media = $form->get('site')->getData();
            //on boucle sur les medias 
            foreach($media as $medi){
                //on génère un nouveau nom de fichier
                $fichier = md5(uniqid()) . '.' . $medi->guessExtension();
                //on copie le fichier dans le dossier img
                $medi->move(
                    $this->getParameter('images_directory'),
                    $fichier
                );
                //on stocke l'image dans la bdd
                $img = new Media();
                $img->setNom($fichier);
                $site->addMedium($img);

            }
            $this->getDoctrine()->getManager()->flush();

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

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

    /**
     * @Route("/{id}", name="site_delete", methods={"POST"})
     */
    public function delete(Request $request, Site $site): Response
    {
        if ($this->isCsrfTokenValid('delete'.$site->getId(), $request->request->get('_token'))) {
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->remove($site);
            $entityManager->flush();
        }

        return $this->redirectToRoute('site_index');
    }
    /**
     * @Route("/conv", name="site_converter")
     */
    public function converter():Response
    {
        return  $this->render('site/converter.html.twig');
    }

    
}

我检查了其他有关此问题的答案,但我仍然找不到解决方案。你有什么想法?我放了更多代码,以便更容易理解。我希望这会很有用。这是让我遇到问题的转换器的路线。谢谢

标签: symfony

解决方案


发生这种情况是因为您有一个名为 的路由/conv,您应该在声明路由之前声明它/{id},而不是 Symfony 搜索id: conv未找到的 Site 对象。

converter路由和方法声明移到您的show路由和方法声明之前。


推荐阅读