douyi8760
2015-10-13 11:24
浏览 63
已采纳

Symfony2添加表单字段错误

I'm trying to update a website(which is based on synfony2) and a database. I have created a new column in the database named 'serial_nr' and entered it in the entity file. Now when i try to add this column to a formbuilder I get this error:

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

This is the form:

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

Here is the entity:

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----------------
The controller action:

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

----------------Solution----------------

There was a typo in the name of the $builder->add of serial_nr. This is how it was:

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

This is how it works:

 $builder->add("serial_nr", "text", array('mapped' => false, "label" => "serial_nr"));
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

  • duanpa1980 2015-10-13 11:35
    最佳回答

    Should be:

    public function setSerial_nr($serial_nr)
    
    public function getSerial_nr()
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题