Doctrine 无法从请求信息中获取实例

Doctrine unable to get instance from request information

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

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

这是应该使用该参数的函数,以便用具有该 ID 的实体实例填充另一个 table,实际上我制作了 2 个应该做同样事情的函数和 none他们有效,而不是 return 相同的学说例外, 这是第一个功能:

/**
     * @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()
        ]);
    }

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

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

一般情况下,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
  4. 中的 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