【问题标题】:Doctrine unable to get instance from request informationDoctrine 无法从请求信息中获取实例
【发布时间】:2021-04-16 00:10:48
【问题描述】:

我一直在尝试不同的方法来从 twig 获取实体属性并在控制器中使用它们来插入另一个数据库表。 这里的想法是将树枝表的属性作为已经存在的数据库变量获取,然后在单击按钮时将它们插入到另一个表中,这似乎对我不起作用,在尝试了几种方法后,我发现自己陷入了无法识别的学说中我在控制器中作为参数传递的属性,我非常感谢这里的一些帮助,因为不知何故它不再有意义了。 这是我从 html 表中发送参数 ID 的树枝:

 <a href="{{ path ('addConte',{'$id':contes.idconte}) }}">Ajouter</a>

这是应该使用该参数的函数,以便使用具有该 ID 的实体实例填充另一个表,实际上我创建了 2 个应该做同样事情的函数,但它们都不起作用,而是返回相同的原则异常, 这是第一个功能:

/**
     * @Route("/ajout/{$id}", name="ajouter")
     * @param Contes $id
     * @return RedirectResponse|Response
     */
    public function ajouter(Contes $id)
    {
        $lstContes1 = new Inventairecontes();
        $em1 = $this->getDoctrine()->getRepository('App:Contes')->find($id);
        $lstContes1->setTitrec($em1.titre);
        $lstContes1->setAuteurc($em1.auteur);
        $em = $this->getDoctrine()->getManager();
        $em->persist($lstContes1);
        $em->flush();

        return new Response('Conte ajouté avec succées!');
    }

这是在插入数据库之前应该填充表单的第二个函数:

/**
     * @Route ("/add/{$id}", name="addConte")
     * @paramConverter ("idCc", options={"mapping":{"id":"idc"}})
     * @return Response
     */
    public function add(Contes $idCc, Request $request)
    {
        $em = $this->getDoctrine()->getRepository('App:Contes')->find($idCc);
        $form = $this->createForm(Inventairecontes::class,$em);
        $form->handleRequest($request);

        if ($form -> isSubmitted() && $form->isValid()){
           $this->getDoctrine()->getManager()->flush();
           return $this->redirectToRoute('listeContes');
        }
        return $this->render('liste_contes/add.html.twig',[
            'em'=>$em,
            'form'=>$form->createView()
        ]);
    }

我真的希望有人可以提供一些帮助,并提前谢谢你:)

【问题讨论】:

    标签: php database symfony doctrine twig


    【解决方案1】:

    我不确定我是否理解您代码中的所有内容,但乍一看,我明白了。

    通常,twig path 函数中的参数不使用美元符号。

    <a href="{{ path ('addConte',{'id':contes.idconte}) }}">Ajouter</a>
    

    路由注解也是如此,你的 $id 参数是 Contes 类型。

    我认为你想要做的是。

    /**
     * @Route("/ajout/{id}", name="ajouter")
     * @param Contes $contes
     * @return RedirectResponse|Response
     */
    public function ajouter(Contes $contes)
    {
        $lstContes1 = new Inventairecontes();
        $lstContes1->setTitrec($contes->getTitre());
        $lstContes1->setAuteurc($contes->getAuteur());
        $em = $this->getDoctrine()->getManager();
        $em->persist($lstContes1);
        $em->flush();
    
        return new Response('Conte ajouté avec succées!');
    }
    

    如果您的 Contes 实体具有属性 id,它将使用参数转换器的魔力自动获取匹配的 Contes。

    接下来,我看到很多问题。

    1. @ParamConverter 注解应该使用大写的 P
    2. 不知道idCc参数是什么,但第一个参数应该是实体
    3. 看起来您正在尝试将 idCc 的 id 属性映射到不在您的 @Route 中的 idc 参数

    也许你应该提供更多细节,因为我真的不明白那部分。

    /**
     * @Route ("/add/{id}", name="addConte")
     * @paramConverter ("idCc", options={"mapping":{"id":"idc"}})
     * @return Response
     */
    public function add(Contes $idCc, Request $request)
    {
        $em = $this->getDoctrine()->getRepository('App:Contes')->find($idCc);
        $form = $this->createForm(Inventairecontes::class,$em);
        $form->handleRequest($request);
    
        if ($form -> isSubmitted() && $form->isValid()){
            $this->getDoctrine()->getManager()->flush();
            return $this->redirectToRoute('listeContes');
        }
        return $this->render('liste_contes/add.html.twig',[
            'em'=>$em,
            'form'=>$form->createView()
        ]);
    }
    

    更多信息here

    【讨论】:

    • 我试图按照你的方式修复第一个函数,但现在它无法识别我用来设置新函数的变量“titre”和“auteur”,他无法读取对象“$contes.titre”和“$contes.auteur”
    • 你使用的是什么版本的 symfony?
    • 4.4.21,异常现在说明如下:使用未定义的常量滴度 - 假定为“滴度”(这将在 PHP 的未来版本中引发错误)
    • 天哪,我觉得我累了,我更新了我的答案
    • 终于成功了!!!非常感谢你救了我哈哈,现在已经两天半了。非常感谢
    猜你喜欢
    • 2012-04-01
    • 2019-08-05
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2021-01-20
    • 1970-01-01
    • 2016-01-28
    相关资源
    最近更新 更多