早上好,
我从数据库中选择了一行来编辑它
$object_before_edit=$this->getDoctrine()->getManager()->getRepository('MyBundle:MyClass')->find($object_id);
$form = $this->createForm(new MyClassType(), $object_before_edit);
$form->handleRequest($request);
if ($form->isValid()) {
// I modified this 2 fields in form
dump($form['fielda']->getData()) . "<br/>";// line 1
dump($form['fieldb']->getData()). "<br/>";// line 2
// but here i want to see the object in the database before doing
// persist and flush
dump($object_before_edit->getFielda()) . "<br/>";// line 3
dump($object_before_edit->getFieldb());// line 4
die();
}
在我的数据库中:
fielda = 1
fieldb = 2
我改变了形式:
fielda = 3
fieldb = 4
所以在转储中我看到了:
第1:3行//其逻辑
第2:4行//其逻辑
第3:3行//为什么???
第4:4行//为什么???
通常,代码在数据库中显示的值不是
形式答案 0 :(得分:0)
当你写这一行时:
$form = $this->createForm(new MyClassType(), $object_before_edit);
您将表单绑定到第二个参数中对象的引用。 Symfony表单定义表单和底层对象之间的映射,在处理表单时可以访问和修改它($form->handleRequest($request);
)。
如果要保留原始值,可能需要克隆原始对象:
$object = $this->getDoctrine()->getManager()->getRepository('MyBundle:MyClass')->find($object_id);
$originalObject = clone $object;
$form = $this->createForm(new MyClassType(), $object);
$form->handleRequest($request);
if ($form->isValid()) {
dump($form['fielda']->getData()) . "<br/>";// 3
dump($form['fieldb']->getData()). "<br/>";// 4
dump($originalObject->getFielda()) . "<br/>";// 1
dump($originalObject->getFieldb());// 2
die();
}
做这样的事情时要小心。确保EntityManager不会保留克隆对象。