2012-07-26 81 views
0

我尝试使用表单更新数据库中的数据。symfony2:更新数据错误

控制器:

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> 

及其给我错误

方法 “ID” 为对象“的Acme \ StoreBundle \实体\产品“在AcmeStoreBundle中不存在:默认值:show.html.twig,第2行 500内部服务器错误 - Twi g_Error_Runtime

+1

不知道是否它的问题,但在一个你'使()'调用产品与资本“P”,而在其他小。 – Maerlyn 2012-07-26 15:48:47

回答

0

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

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

我将此代码添加到我的产品实体,但它仍然给我同样的错误。我认为这个问题在show.html.twig中。 – user1328671 2012-07-26 13:49:19

+0

发布您的getId()代码,因为您的错误信息可能存在拼写错误。另外,阅读手册中的表格部分并遵循基本示例。没有理由拉取名称/价格/描述,然后重新设置它们。 bindRequest负责照顾。 – Cerad 2012-07-26 16:19:11

+0

我认为你已经混淆了两个'渲染'线。对show.html.twig的调用应该在保持对象之后,而pageadd.html.twig如果表单无效 – 2012-07-26 16:55:51