Symfony2添加表单字段错误

时间:2015-10-13 11:24:38

标签: php symfony twig

我正在尝试更新网站(基于synfony2)和数据库。我在数据库中创建了一个名为“serial_nr”的新列,并在实体文件中输入了该列。现在,当我尝试将此列添加到formbuilder时,我收到此错误:

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;
    }

---------------- EDIT ----------------
控制器动作:

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-&gt; add of serial_nr的名称中有一个拼写错误。 就是这样:

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

这是它的工作原理:

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

1 个答案:

答案 0 :(得分:0)

应该是:

public function setSerial_nr($serial_nr)

public function getSerial_nr()