2015-10-13 122 views
-1

我试图更新一个网站(这是基于synfony2)和一个数据库。我在名为'serial_nr'的数据库中创建了一个新列,并将其输入到实体文件中。现在,当我尝试将此列添加到formbuilder我得到这个错误:Symfony2添加一个表单域错误

 
Method "serial_nr" for object "Symfony\Component\Form\FormView" does not exist in 
AppBundle:Product:list.html.twig at line 31

这是形式:

<div class="control-group"> 
    <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>Name</label> 

    <div class="controls"> 
     {{form_widget(form.name)}} 
     {{form_errors(form.name)}} 
    </div> 
</div> 
<div class="control-group"> 
    <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>Serial number</label> 

    <div class="controls"> 
     {{form_widget(form.serial_nr)}} <--------- line 31 
     {{form_errors(form.serial_nr)}} 
    </div> 
</div> 
<div class="control-group"> 
    <label{% for attrname,attrvalue in attr %} {{attrname}}="{{attrvalue}}"{% endfor %}>Price</label> 

    <div class="controls"> 
     <div class="input-prepend"> 
      <span class="add-on">&euro;</span> 
      {{form_widget(form.price)}} 
     </div> 
     {{form_errors(form.price)}} 
    </div> 
</div> 

这里是实体:

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 


    /** 
    * @var varchar $serial_nr 
    */ 
    private $serial_nr; 

    /** 
    * Set serial_nr 
    * 
    * @param varchar $serial_nr 
    * @return ProductRevision 
    */ 
    public function setserial_nr($serial_nr) 
    { 
     $this->serial_nr = $serial_nr; 

     return $this; 
    } 

    /** 
    * Get serial_nr 
    * 
    * @return varchar 
    */ 
    public function getserial_nr() 
    { 
     return $this->serial_nr; 
    } 

- --------------编辑----------------
控制器操作:

public function addAction(Request $request){ 
     $product = new Product(); 

     $form = $this->createForm(new ProductType($this->get('Doctrine')->getEntityManager()), $product); 
     $errors = array(); 

     if($request->isMethod("POST")){ 
      $form->bind($request); 

      $revision = new ProductRevision(); 
      $revision->setPrice($form->get("price")->getData()); 
      $revision->setBuyprice($form->get("buyprice")->getData()); 
      $revision->setUnit($form->get("unit")->getData()); 
      $revision->setStock($form->get("stock")->getData()); 
      $revision->setDescription($form->get("description")->getData()); 
      $revision->setDate(new DateTime(date("Y-m-d H:i:s"))); 
      $revision->setSerial_nr($form->get("serial_nr")->getData()); 

      $em = $this->getDoctrine()->getManager(); 
      $category = $em->getRepository('AppBundle:Category')->findOneBy(array('name' => $form->get("category")->getData())); 

      // Make sure a valid category is entered! 
      if($category == null){ 
       return $this->redirect("/categories/" . $_POST["product"]["categoryId"] . "/products"); 
      } 
      $revision->setProduct($product); 
      $product->addProductRevision($revision); 
      $product->setCategory($category); 

      $validator = $this->get('validator'); 
      $errors = $validator->validate($revision); 

      if($form->isValid() && count($errors) === 0){ 
       // Form is valid! 
       $em = $this->getDoctrine()->getManager(); 
       $em->persist($revision); 


       $em->persist($product); 

      try{ 
       $em->flush(); 
      } catch(Exception $e){ 
       return new Response($e->getMessage(), 200); 
      } 

      return $this->redirect("/products/" . $product->getId() . "/show"); 
     } 
    } 

    return $this->render('AppBundle:Product:addproduct.html.twig', array('form' => $form->createView(), 'active' => "products", 'errors' => $errors)); 
} 

----------------解决方案----------------

有一个错字在$ builder->添加serial_nr的名称。 这究竟是怎么回事:

$builder->add("sreial_nr", "text", array('mapped' => false, "label" => "serial_nr")); 

这是它如何工作的:

$builder->add("serial_nr", "text", array('mapped' => false, "label" => "serial_nr")); 
+0

的解决办法是在你的控制器动作。我们可以看到它吗? – scoolnico

回答

0

应该是:

public function setSerial_nr($serial_nr) 

public function getSerial_nr() 
+0

没有工作。我收到了同样的错误。 – yesbe97

+0

你还有什么可以尝试吗? – yesbe97

+0

将您的控制器操作显示为scoolnico建议 –