【问题标题】:App\Entity\Site object not found by the @ParamConverter annotation@ParamConverter 注释找不到 App\Entity\Site 对象
【发布时间】:2021-10-02 18:05:26
【问题描述】:

我正在尝试在我的 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');
    }

    
}

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

【问题讨论】:

  • 您可能在该功能之上有一条路线,例如:@Route("/site/{id}" ?
  • 我放了更多代码以便更容易理解
  • 不清楚什么时候出现这个错误。而且你有很多被注释掉的代码。请删除它,它会使您的问题更易于阅读。
  • 代码不相关。此错误由包含@ ParamConverter 的某些代码触发。如果您不提供代码,我们将无法理解。我认为您的错误是考虑到消息来自此处,您在 URL 中输入的“站点”ID 不存在:github.com/sensiolabs/SensioFrameworkExtraBundle/blob/…

标签: symfony


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-02
    • 2022-01-09
    • 2017-08-11
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    相关资源
    最近更新 更多