Symfony\Component\Form\Extension\DataCollector\FormDataCollector::serialize PHP Method

serialize() public method

public serialize ( )
    public function serialize()
    {
        $cloneVar = array($this, 'cloneVar');

        foreach ($this->data['forms_by_hash'] as &$form) {
            foreach ($form as $k => $v) {
                switch ($k) {
                    case 'type_class':
                        $form[$k] = $cloneVar($v, true);
                        break;
                    case 'synchronized':
                        $form[$k] = $cloneVar($v);
                        break;
                    case 'view_vars':
                    case 'passed_options':
                    case 'resolved_options':
                    case 'default_data':
                    case 'submitted_data':
                        if ($v && is_array($v)) {
                            $form[$k] = array_map($cloneVar, $v);
                        }
                        break;
                    case 'errors':
                        foreach ($v as $i => $e) {
                            if (!empty($e['trace'])) {
                                $form['errors'][$i]['trace'] = array_map($cloneVar, $e['trace']);
                            }
                        }
                        break;
                }
            }
        }

        return serialize($this->data);
    }

Usage Example

    public function testSerializeWithFormAddedMultipleTimes()
    {
        $form1 = $this->createForm('form1');
        $form2 = $this->createForm('form2');
        $child1 = $this->createForm('child1');

        $form1View = new FormView();
        $form2View = new FormView();
        $child1View = new FormView();
        $child1View->vars['is_selected'] = function ($choice, array $values) {
            return in_array($choice, $values, true);
        };

        $form1->add($child1);
        $form2->add($child1);

        $form1View->children['child1'] = $child1View;
        $form2View->children['child1'] = $child1View;

        $this->dataExtractor->expects($this->at(0))
            ->method('extractConfiguration')
            ->with($form1)
            ->will($this->returnValue(array('config' => 'foo')));
        $this->dataExtractor->expects($this->at(1))
            ->method('extractConfiguration')
            ->with($child1)
            ->will($this->returnValue(array('config' => 'bar')));

        $this->dataExtractor->expects($this->at(2))
            ->method('extractDefaultData')
            ->with($form1)
            ->will($this->returnValue(array('default_data' => 'foo')));
        $this->dataExtractor->expects($this->at(3))
            ->method('extractDefaultData')
            ->with($child1)
            ->will($this->returnValue(array('default_data' => 'bar')));

        $this->dataExtractor->expects($this->at(4))
            ->method('extractSubmittedData')
            ->with($form1)
            ->will($this->returnValue(array('submitted_data' => 'foo')));
        $this->dataExtractor->expects($this->at(5))
            ->method('extractSubmittedData')
            ->with($child1)
            ->will($this->returnValue(array('submitted_data' => 'bar')));

        $this->dataExtractor->expects($this->at(6))
            ->method('extractViewVariables')
            ->with($form1View)
            ->will($this->returnValue(array('view_vars' => 'foo')));

        $this->dataExtractor->expects($this->at(7))
            ->method('extractViewVariables')
            ->with($child1View)
            ->will($this->returnValue(array('view_vars' => $child1View->vars)));

        $this->dataExtractor->expects($this->at(8))
            ->method('extractConfiguration')
            ->with($form2)
            ->will($this->returnValue(array('config' => 'foo')));
        $this->dataExtractor->expects($this->at(9))
            ->method('extractConfiguration')
            ->with($child1)
            ->will($this->returnValue(array('config' => 'bar')));

        $this->dataExtractor->expects($this->at(10))
            ->method('extractDefaultData')
            ->with($form2)
            ->will($this->returnValue(array('default_data' => 'foo')));
        $this->dataExtractor->expects($this->at(11))
            ->method('extractDefaultData')
            ->with($child1)
            ->will($this->returnValue(array('default_data' => 'bar')));

        $this->dataExtractor->expects($this->at(12))
            ->method('extractSubmittedData')
            ->with($form2)
            ->will($this->returnValue(array('submitted_data' => 'foo')));
        $this->dataExtractor->expects($this->at(13))
            ->method('extractSubmittedData')
            ->with($child1)
            ->will($this->returnValue(array('submitted_data' => 'bar')));

        $this->dataExtractor->expects($this->at(14))
            ->method('extractViewVariables')
            ->with($form2View)
            ->will($this->returnValue(array('view_vars' => 'foo')));

        $this->dataExtractor->expects($this->at(15))
            ->method('extractViewVariables')
            ->with($child1View)
            ->will($this->returnValue(array('view_vars' => $child1View->vars)));

        $this->dataCollector->collectConfiguration($form1);
        $this->dataCollector->collectDefaultData($form1);
        $this->dataCollector->collectSubmittedData($form1);
        $this->dataCollector->collectViewVariables($form1View);
        $this->dataCollector->buildFinalFormTree($form1, $form1View);

        $this->dataCollector->collectConfiguration($form2);
        $this->dataCollector->collectDefaultData($form2);
        $this->dataCollector->collectSubmittedData($form2);
        $this->dataCollector->collectViewVariables($form2View);
        $this->dataCollector->buildFinalFormTree($form2, $form2View);

        $this->dataCollector->serialize();
    }