Skip to content

Commit af97d03

Browse files
author
Jonathan McLean
committed
Fix error when data is excluded by cell_filter
This seems to affect only some old Symfony versions
1 parent 2c70665 commit af97d03

File tree

2 files changed

+42
-15
lines changed

2 files changed

+42
-15
lines changed

Form/EventListener/CheckboxRowCreationListener.php

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -86,23 +86,25 @@ protected function addCheckbox($options, $choice, FormInterface $form, $value, $
8686
{
8787
if (isset($options['cell_filter']) && !$options['cell_filter']($choice, $options['row'])) {
8888
// Blank cell - put a dummy form control here
89-
$form->add($value, LegacyFormUtil::getType('Symfony\Component\Form\Extension\Core\Type\FormType'), array());
89+
$formType = LegacyFormUtil::getType('Symfony\Component\Form\Extension\Core\Type\FormType');
9090
} else {
91-
$builder = $this->factory->createNamedBuilder(
92-
$value,
93-
LegacyFormUtil::getType('Symfony\Component\Form\Extension\Core\Type\CheckboxType'),
94-
isset($data[$value]),
95-
array(
96-
'auto_initialize' => false,
97-
'required' => false,
98-
)
99-
);
100-
101-
if (isset($data[$value])) {
102-
$builder->addViewTransformer(new AnythingToBooleanTransformer($data[$value]), true);
103-
}
91+
$formType = LegacyFormUtil::getType('Symfony\Component\Form\Extension\Core\Type\CheckboxType');
92+
}
10493

105-
$form->add($builder->getForm());
94+
$builder = $this->factory->createNamedBuilder(
95+
$value,
96+
$formType,
97+
isset($data[$value]),
98+
array(
99+
'auto_initialize' => false,
100+
'required' => false,
101+
)
102+
);
103+
104+
if (isset($data[$value])) {
105+
$builder->addViewTransformer(new AnythingToBooleanTransformer($data[$value]), true);
106106
}
107+
108+
$form->add($builder->getForm());
107109
}
108110
}

Tests/CheckboxGrid/EntityCheckboxGridTest.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,31 @@ public function testEntityPreserved()
166166
$this->assertSame($spa, $salesman->getProductAreas()->first());
167167
}
168168

169+
/**
170+
* Test that cell_filter tolerates existing data.
171+
*/
172+
public function testCellFilter()
173+
{
174+
$this->expectSpa();
175+
176+
$salesman = new TestEntity\Salesman();
177+
178+
$salesman->addProductArea($spa = new TestEntity\SalesmanProductArea());
179+
$spa->setProductSold($this->products[2]); // Desk
180+
$spa->setAreaServiced($this->areas[1]); // North side
181+
182+
// This should run without throwing an error
183+
$form = $this->factory->create(LegacyFormUtil::getType('Infinite\FormBundle\Tests\CheckboxGrid\Type\SalesmanType'), $salesman, array(
184+
'product_area_options' => array(
185+
'cell_filter' => function (TestEntity\Product $x, TestEntity\Area $y) {
186+
return !(
187+
$x === $this->products[2] && $y === $this->areas[1]
188+
);
189+
},
190+
),
191+
));
192+
}
193+
169194
/**
170195
* Query builders are allowed on both axes.
171196
*/

0 commit comments

Comments
 (0)