【问题标题】:symfony2: update data errorsymfony2:更新数据错误
【发布时间】:2012-07-26 12:09:49
【问题描述】:

我正在尝试使用表单更新数据库中的数据。

控制器是:

public function addAction($id) {

  $em = $this->getDoctrine()->getEntityManager();
  $product = $em->getRepository('AcmeStoreBundle:Product')->find($id);
  if (!$product) {
    $product = new Product();
  }
  $form = $this->createForm(new PageAdd(), $product);
  $request = $this->getRequest();

  if ($request->getMethod() == 'POST') {
     $form->bindRequest($request);

     $name=$this->get('request')->request->get('name');
     $price=$this->get('request')->request->get('price');
     $description=$this->get('request')->request->get('description'); 

     if ($form->isValid()) {
        $product->setName($name);
        $product->setPrice($price);
        $product->setDescription($description);    

        $em->persist($product);
        $em->flush();

        /*Llamando a la plantilla de listados*/
        $product = $em->getRepository('AcmeStoreBundle:Product')->findAll();

        /*Enviando los datos a la plantilla y Renderizandola*/
        return $this->render('AcmeStoreBundle:Default:pageadd.html.twig', array('Product' => $product));
     }
  }

  return $this->render('AcmeStoreBundle:Default:show.html.twig', array('form' => $form->createView(), 'product' => $product));
}

show.html.twig 文件是

<form action="{{ path('Product_add',{'id':product.id}) }}"
{{ form_enctype(form) }}>

            {{ form_errors(form) }}

            {{ form_rest(form) }}

               <input type="submit" value="Save This Page" class="savebutton" />

         </form>

它给了我错误

对象“Acme\StoreBundle\Entity\Product”的方法“id”在第 2 行的 AcmeStoreBundle:Default:show.html.twig 中不存在 500 内部服务器错误 - Twig_Error_Runtime

【问题讨论】:

  • 不确定是否重要,但在您的一个render() 通话中,产品的大写字母为“P”,而另一个则小。

标签: php symfony symfony-forms


【解决方案1】:

这意味着您的产品实体中缺少 getId() 方法。

public function getId()
{
  return $this->id;
}

【讨论】:

  • 我将此代码添加到我的产品实体中,但它仍然给我同样的错误。我认为问题出在 show.html.twig 中。
  • 发布您的 getId() 代码,因为根据您的错误消息,您可能有错字。此外,请通读手册中的表格部分并遵循基本示例。没有理由提取名称/价格/描述然后再次设置它们。 bindRequest 负责处理。
  • 我认为您混淆了两条“渲染”行。对 show.html.twig 的调用应该在持久化对象之后调用,如果表单无效,则调用 pageadd.html.twig
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多