Skip to content

Commit c6ad5dc

Browse files
committed
Merge pull request #25 from WouterJ/fix-sf3
Also fix KeyValueRowType
2 parents 2810ccb + 07f3133 commit c6ad5dc

File tree

3 files changed

+68
-27
lines changed

3 files changed

+68
-27
lines changed

Form/Type/KeyValueRowType.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,11 @@ public function setDefaultOptions(OptionsResolverInterface $resolver)
4141

4242
public function configureOptions(OptionsResolver $resolver)
4343
{
44+
// check if Form component version 2.8+ is used
45+
$isSf28 = method_exists('Symfony\Component\Form\AbstractType', 'getBlockPrefix');
46+
4447
$resolver->setDefaults(array(
45-
'key_type' => 'text',
48+
'key_type' => $isSf28 ? 'Symfony\Component\Form\Extension\Core\Type\TextType' : 'text',
4649
'key_options' => array(),
4750
'value_options' => array(),
4851
'allowed_keys' => null

Form/Type/KeyValueType.php

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use Burgov\Bundle\KeyValueFormBundle\Form\DataTransformer\HashToKeyValueArrayTransformer;
66
use Symfony\Component\Form\AbstractType;
7-
use Symfony\Component\Form\Extension\Core\Type\TextType;
87
use Symfony\Component\Form\FormBuilderInterface;
98
use Symfony\Component\Form\FormEvent;
109
use Symfony\Component\Form\FormEvents;
@@ -49,10 +48,10 @@ public function configureOptions(OptionsResolver $resolver)
4948
$isSf28 = method_exists('Symfony\Component\Form\AbstractType', 'getBlockPrefix');
5049

5150
$resolver->setDefaults(array(
52-
$isSf28 ? 'entry_type' : 'type' => $isSf28 ? KeyValueRowType::class : 'burgov_key_value_row',
51+
$isSf28 ? 'entry_type' : 'type' => $isSf28 ? __NAMESPACE__.'\KeyValueRowType' : 'burgov_key_value_row',
5352
'allow_add' => true,
5453
'allow_delete' => true,
55-
'key_type' => $isSf28 ? TextType::class : 'text',
54+
'key_type' => $isSf28 ? 'Symfony\Component\Form\Extension\Core\Type\TextType' : 'text',
5655
'key_options' => array(),
5756
'value_options' => array(),
5857
'allowed_keys' => null,

Tests/Form/Type/KeyValueTypeTest.php

+62-23
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,36 @@
66
use Burgov\Bundle\KeyValueFormBundle\Form\Type\KeyValueType;
77
use Symfony\Component\Form\AbstractExtension;
88
use Symfony\Component\Form\Extension\Core\ChoiceList\ObjectChoiceList;
9+
use Symfony\Component\Form\ChoiceList\ArrayChoiceList;
910
use Symfony\Component\Form\Test\TypeTestCase;
1011

1112
class KeyValueTypeTest extends TypeTestCase
1213
{
14+
private static $isSf28;
15+
private static $typeNames = array();
16+
17+
public function setUp()
18+
{
19+
parent::setUp();
20+
21+
if (null === self::$isSf28) {
22+
self::$isSf28 = method_exists('Symfony\Component\Form\AbstractType', 'getBlockPrefix');
23+
if (self::$isSf28) {
24+
self::$typeNames = array(
25+
'choice' => 'Symfony\Component\Form\Extension\Core\Type\ChoiceType',
26+
'text' => 'Symfony\Component\Form\Extension\Core\Type\TextType',
27+
'burgov_key_value' => 'Burgov\Bundle\KeyValueFormBundle\Form\Type\KeyValueType',
28+
);
29+
} else {
30+
self::$typeNames = array(
31+
'choice' => 'choice',
32+
'text' => 'text',
33+
'burgov_key_value' => 'burgov_key_value',
34+
);
35+
}
36+
}
37+
}
38+
1339
public function getExtensions()
1440
{
1541
return array(new ConcreteExtension());
@@ -43,20 +69,23 @@ public function testSubmitValidData()
4369
'key3' => '1',
4470
);
4571

46-
$builder = $this->factory->createBuilder('burgov_key_value', $originalData, array(
47-
'value_type' => 'text',
48-
'key_options' => array('label' => 'label_key'),
49-
'value_options' => array('label' => 'label_value')));
50-
51-
$form = $builder->getForm();
72+
$form = $this->factory->create(
73+
self::$typeNames['burgov_key_value'],
74+
$originalData,
75+
array(
76+
'value_type' => self::$typeNames['text'],
77+
'key_options' => array('label' => 'label_key'),
78+
'value_options' => array('label' => 'label_value')
79+
)
80+
);
5281

53-
$this->assertFormTypes(array('text', 'text'), array('text', 'text'), $form);
82+
$this->assertFormTypes(array(self::$typeNames['text'], self::$typeNames['text']), array(self::$typeNames['text'], self::$typeNames['text']), $form);
5483
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);
5584

5685
$form->submit($submitData);
57-
$this->assertTrue($form->isValid(), $form->getErrorsAsString());
86+
$this->assertTrue($form->isValid(), $form->getErrors());
5887

59-
$this->assertFormTypes(array('text', 'text', 'text'), array('text', 'text', 'text'), $form);
88+
$this->assertFormTypes(array(self::$typeNames['text'], self::$typeNames['text'], self::$typeNames['text']), array(self::$typeNames['text'], self::$typeNames['text'], self::$typeNames['text']), $form);
6089
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);
6190

6291
$this->assertSame($expectedData, $form->getData());
@@ -72,15 +101,26 @@ public function testWithChoiceType()
72101
$obj2->id = 2;
73102
$obj2->name = 'choice2';
74103

75-
$builder = $this->factory->createBuilder('burgov_key_value', null, array(
76-
'value_type' => 'choice',
77-
'key_options' => array('label' => 'label_key'),
78-
'value_options' => array(
79-
'choice_list' => new ObjectChoiceList(array($obj1, $obj2), 'name', array(), null, 'id'),
80-
'label' => 'label_value'
81-
)));
104+
$valueOptions = array('label' => 'label_value');
105+
if (self::$isSf28) {
106+
// Symfony 2.8+
107+
$valueOptions['choices'] = array($obj1, $obj2);
108+
$valueOptions['choice_name'] = 'id';
109+
$valueOptions['choice_value'] = 'name';
110+
} else {
111+
// Symfony <2.8
112+
$valueOptions['choice_list'] = new ObjectChoiceList(array($obj1, $obj2), 'name', array(), null, 'id');
113+
}
82114

83-
$form = $builder->getForm();
115+
$form = $this->factory->create(
116+
self::$typeNames['burgov_key_value'],
117+
null,
118+
array(
119+
'value_type' => self::$typeNames['choice'],
120+
'key_options' => array('label' => 'label_key'),
121+
'value_options' => $valueOptions,
122+
)
123+
);
84124

85125
$this->assertFormTypes(array(), array(), $form);
86126
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);
@@ -96,7 +136,7 @@ public function testWithChoiceType()
96136
)
97137
));
98138

99-
$this->assertFormTypes(array('text', 'text'), array('choice', 'choice'), $form);
139+
$this->assertFormTypes(array(self::$typeNames['text'], self::$typeNames['text']), array(self::$typeNames['choice'], self::$typeNames['choice']), $form);
100140
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);
101141

102142
$this->assertTrue($form->isValid());
@@ -106,14 +146,12 @@ public function testWithChoiceType()
106146

107147
public function testWithCustomKeyType()
108148
{
109-
$builder = $this->factory->createBuilder('burgov_key_value', null, array(
149+
$form = $this->factory->create(self::$typeNames['burgov_key_value'], null, array(
110150
'key_type' => 'country',
111151
'value_type' => 'integer',
112152
'key_options' => array('label' => 'label_key'),
113153
));
114154

115-
$form = $builder->getForm();
116-
117155
$this->assertFormTypes(array(), array(), $form);
118156
$this->assertFormOptions(array(array('label' => 'label_key'), array()), $form);
119157

@@ -141,10 +179,11 @@ private function assertFormTypes(array $keys, array $values, $form)
141179
$this->assertCount(count($values), $form);
142180
for ($i = 0; $i < count($form); $i++) {
143181
if (isset($keys[$i])) {
144-
$this->assertEquals($keys[$i], $form->get($i)->get('key')->getConfig()->getType()->getInnerType()->getName());
182+
183+
$this->assertInstanceOf($keys[$i], $form->get($i)->get('key')->getConfig()->getType()->getInnerType());
145184
}
146185
if (isset($values[$i])) {
147-
$this->assertEquals($values[$i], $form->get($i)->get('value')->getConfig()->getType()->getInnerType()->getName());
186+
$this->assertInstanceOf($values[$i], $form->get($i)->get('value')->getConfig()->getType()->getInnerType());
148187
}
149188
}
150189
}

0 commit comments

Comments
 (0)