【问题标题】:Symfony2 404 error: Object Not Found (ParamConverter error)Symfony2 404 错误:找不到对象(ParamConverter 错误)
【发布时间】:2017-08-11 17:22:36
【问题描述】:

我创建了一个名为 search.html.twig 的新边界类,但是当我转到 URL (http://localhost:8000/shrubs/search) 时出现以下错误:

错误 - 未捕获的 PHP 异常 Symfony\Component\HttpKernel\Exception\NotFoundHttpException:“找不到 AppBundle\Entity\Shrubs 对象。”在 C:\Users\rosmith\shrub_search\vendor\sensio\framework-extra-bundle\Request\ParamConverter\DoctrineParamConverter.php 第 66 行

我的 ParamConverter 一定有问题吗?我的注释正确吗?我阅读了 symfony 文档,但这对我来说毫无意义。这是我的控制器:

 /**
     * Finds and displays a shrub entity.
     *
     * @Route("/search", name="shrubs_search")
     * @ParamConverter("post", class="AppBundle:Shrubs")
     */
    private function searchAction(Request $request)
    {
        $shrub = new Shrubs();
        $form = $this->createForm('AppBundle\Form\ShrubsType', $shrub)
            ->add('botanicalname', TextType::class, array('label' => 'Botanical Name:'))
            ->add('commonname', TextType::class, array('label' => 'Common Name:'))
            ->add('wetsoil', CheckboxType::class, array('label' => 'Tolerates Wet Soil:'))
            ->add('moistsoil', CheckboxType::class, array('label' => 'Prefers Moist Soil:'))
            ->add('peatysoil', CheckboxType::class, array('label' => 'Prefers Peaty Soil:'))
            ->add('welldrainedsoil', CheckboxType::class, array('label' => 'Prefers Well-drained Soil:'))
            ->add('drought', CheckboxType::class, array('label' => 'Tolerates Drought:'))
            ->add('claysoil', CheckboxType::class, array('label' => 'Tolerates Clay Soil:'))
            ->add('sandysoil', CheckboxType::class, array('label' => 'Prefers Sandy Soil:'))
            ->add('loamsoil', CheckboxType::class, array('label' => 'Prefers Loam Soil:'))
            ->add('infertilesoil', CheckboxType::class, array('label' => 'Tolerates Infertile Soil:'))
            ->add('richsoil', CheckboxType::class, array('label' => 'Prefers Rich Soil:'))
            ->add('compactedsoil', CheckboxType::class, array('label' => 'Tolerates Compacted Soil:'))
            ->add('cityconditions', CheckboxType::class, array('label' => 'Tolerates City Conditions:'))
            ->add('pollution', CheckboxType::class, array('label' => 'Tollerates Pollution:'))
            ->add('salt', CheckboxType::class, array('label' => 'Tolerates Salt Conditions:'))
            ->add('windy', CheckboxType::class, array('label' => 'Tolerates Windy Conditions:'))
            ->add('shade', CheckboxType::class, array('label' => 'Prefers Shade:'))
            ->add('partshade', CheckboxType::class, array('label' => 'Prefers Part Shade:'))
            ->add('fullsun', CheckboxType::class, array('label' => 'Prefers Full Sun:'))
            ->add('pestproblem', CheckboxType::class, array('label' => 'Pest Problem:'))
            ->add('borderlinehardy', CheckboxType::class, array('label' => 'BorderLine Hardy'));

        $form->handleRequest($request);

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

            return $this->redirectToRoute('shrubs_show', array('id' => $shrub->getNumber()));
        }

        return $this->render('shrubs/new.html.twig', array(
            'shrub' => $shrub,
            'form' => $form->createView(),
        ));
    }

【问题讨论】:

  • 只需去掉paramconverter注解

标签: php symfony parameters controller http-status-code-404


【解决方案1】:

您的路线应包含post 参数。

@Route("/search/{post}", name="shrubs_search")

您的方法也应该将此参数作为方法参数。

【讨论】:

  • 我把注释改成:
  • /** * 查找并显示灌木实体。 * * @Route("/search/{post}", name="shrubs_search") * @ParamConverter("post", class="AppBundle:Shrubs") */
  • 问题中发布的 URL 未指定任何 id,因此可能只是一个错字,此处并不需要 paramconverter
  • 哦,我想通了。我不得不将控制器方法从私有更改为公共。非常感谢你们的帮助
  • 我有同样的问题:2 个几乎等于,公共函数,2 个变量,对象和字符串。一个可以找到Entity obj,另一个找不到驯服的实体lol
猜你喜欢
  • 2019-01-02
  • 2018-12-09
  • 2018-06-06
  • 2014-08-11
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 2017-06-27
相关资源
最近更新 更多