提交值后更改symfony2

时间:2016-03-16 07:43:48

标签: php validation symfony doctrine-orm

早上好,

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

$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行//为什么???

通常,代码在数据库中显示的值不是

形式

1 个答案:

答案 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不会保留克隆对象。