【问题标题】:symfony2 after submit the values changedsymfony2 提交后更改的值
【发布时间】:2016-03-16 07:43:47
【问题描述】:

早上好,

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

$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

字段b = 2

我改变它的形式:

fielda = 3

字段b = 4

所以在我看到的转储中:

line 1 : 3 // 它的逻辑

line 2 : 4 // 它的逻辑

第 3 行:3 // 为什么???

第 4 行:4 // 为什么???

通常代码显示数据库中的值而不是表单

【问题讨论】:

    标签: php validation symfony doctrine-orm


    【解决方案1】:

    当你写这行时:

    $form = $this->createForm(new MyClassType(), $object_before_edit);
    

    您将表单绑定到对第二个参数中对象的引用。 Symfony 表单定义了表单和底层对象之间的映射,在处理表单时可以访问和修改 ($form-&gt;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 不会持久化克隆的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多