我有一个简单的课程:
class Type
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=15)
*/
private $name;
...
}
并在数据库中有一些“类型”对象。因此,如果我想更改其中一个,我会创建新的控制器规则(如 /types/edit/{id})和新操作:
public function typesEditViewAction($id)
{
...
$editedType = new Type();
$form = $this->createFormBuilder($editedType)
->add('name', 'text')
->add('id', 'hidden', array('data' => $id))
->getForm();
// send form to twig template
...
}
之后,我创建另一个控制器规则(如 /types/do_edit)和操作:
public function typesEditAction(Request $request)
{
...
$editedType = new Type();
$form = $this->createFormBuilder($editedType)
->add('name', 'text')
->add('id', 'hidden')
->getForm();
$form->bind($request); // <--- ERROR THERE !!!
// change 'type' object in db
...
}
我在那里发现了一个小问题。Сlass 'Type' 没有自动生成的 setter setId() 并且在绑定时出现错误。
Neither the property "id" nor one of the methods "setId()", "__set()" or "__call()" exist and have public access in class "Lan\CsmBundle\Entity\Type".
现在,我从 symfony2 表单对象 ($form) 中删除 'id' 字段并将其手动传输到模板。在第二个控制器的操作中,我将 $form 对象和“id”字段分开。我不知道这样做的“正确”方式(更新“类型”类)。请帮忙。