早上好,
我从数据库中选择了一行进行编辑
$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();
}
在我的数据库中:
字段 = 1
字段 B = 2
我更改它的形式:
字段 = 3
字段 B = 4
所以在垃圾场我看到:
第 1 行:3//其逻辑
第 2 行:4//其逻辑
第 3 行 : 3//为什么???
第 4 行 : 4//为什么???
通常代码显示数据库中的值而不是形式
当你写这行时:
$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();
}
做这样的事情时要小心。确保实体管理器不会保留克隆的对象。