10000 minor #20022 [Form] Fix FormDataCollector (nicolas-grekas) · enumag/symfony@fd0d288 · GitHub
[go: up one dir, main page]

Skip to content

Commit fd0d288

Browse files
minor symfony#20022 [Form] Fix FormDataCollector (nicolas-grekas)
This PR was merged into the 3.2-dev branch. Discussion ---------- [Form] Fix FormDataCollector | Q | A | ------------- | --- | Branch? | master | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | symfony#20020 | License | MIT | Doc PR | - Commits ------- b65f0a8 [Form] Fix FormDataCollector
2 parents 287f7c8 + b65f0a8 commit fd0d288

File tree

1 file changed

+28
-16
lines changed

1 file changed

+28
-16
lines changed

src/Symfony/Component/Form/Extension/DataCollector/FormDataCollector.php

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -243,22 +243,30 @@ public function serialize()
243243
$cloneVar = array($this, 'cloneVar');
244244

245245
foreach ($this->data['forms_by_hash'] as &$form) {
246-
if ($form['type_class'] instanceof Data) {
247-
continue;
248-
}
249-
$form['view_vars'] = array_map($cloneVar, $form['view_vars']);
250-
$form['type_class'] = $cloneVar($form['type_class'], true);
251-
$form['synchronized'] = $cloneVar($form['synchronized']);
252-
$form['passed_options'] = array_map($cloneVar, $form['passed_options']);
253-
$form['resolved_options'] = array_map($cloneVar, $form['resolved_options']);
254-
$form['default_data'] = array_map($cloneVar, $form['default_data']);
255-
$form['submitted_data'] = array_map($cloneVar, $form['submitted_data']);
256-
257-
if (!empty($form['errors'])) {
258-
foreach ($form['errors'] as $i => $error) {
259-
if (!empty($error['trace'])) {
260-
$form['errors'][$i]['trace'] = array_map($cloneVar, $error['trace']);
261-
}
246+
foreach ($form as $k => $v) {
247+
switch ($k) {
248+
case 'type_class':
249+
$form[$k] = $cloneVar($v, true);
250+
break;
251+
case 'synchronized':
252+
$form[$k] = $cloneVar($v);
253+
break;
254+
case 'view_vars':
255+
case 'passed_options':
256+
case 'resolved_options':
257+
case 'default_data':
258+
case 'submitted_data':
259+
if ($v) {
260+
$form[$k] = array_map($cloneVar, $v);
261+
}
262+
break;
263+
case 'errors':
264+
foreach ($v as $i => $e) {
265+
if (!empty($e['trace'])) {
266+
$form['errors'][$i]['trace'] = array_map($cloneVar, $e['trace']);
267+
}
268+
}
269+
break;
262270
}
263271
}
264272
}
@@ -271,9 +279,13 @@ public function serialize()
271279
*/
272280
protected function cloneVar($var, $isClass = false)
273281
{
282+
if ($var instanceof Data) {
283+
return $var;
284+
}
274285
if (null === $this->cloner) {
275286
if (class_exists(ClassStub::class)) {
276287
$this->cloner = new VarCloner();
288+
$this->cloner->setMaxItems(25);
277289
$this->cloner->addCasters(array(
278290
'*' => function ($v, array $a, Stub $s, $isNested) {
279291
if ($isNested && !$v instanceof \DateTimeInterface) {

0 commit comments

Comments
 (0)
0