我正在尝试更新网站(基于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">€</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"));
答案 0 :(得分:0)
应该是:
public function setSerial_nr($serial_nr)
public function getSerial_nr()