提交后,Symfony2 的值发生了变化



早上好,

我从数据库中选择了一行进行编辑

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

做这样的事情时要小心。确保实体管理器不会保留克隆的对象。

相关内容

最新更新