Skip to content

Commit 8bc3cc5

Browse files
committed
Merge pull request #11 from alanpoulain/master
Added key_options option
2 parents 80bf5a4 + df56e6f commit 8bc3cc5

File tree

3 files changed

+35
-10
lines changed

3 files changed

+35
-10
lines changed

Form/Type/KeyValueRowType.php

+6-6
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@ class KeyValueRowType extends AbstractType
1313
public function buildForm(FormBuilderInterface $builder, array $options)
1414
{
1515
if (null === $options['allowed_keys']) {
16-
$builder->add('key', 'text', array(
17-
));
16+
$builder->add('key', 'text', $options['key_options']
17+
);
1818
} else {
19-
$builder->add('key', 'choice', array(
19+
$builder->add('key', 'choice', array_merge(array(
2020
'choice_list' => new SimpleChoiceList($options['allowed_keys'])
21+
), $options['key_options']
2122
));
2223
}
2324

@@ -32,13 +33,12 @@ public function getName()
3233
public function setDefaultOptions(OptionsResolverInterface $resolver)
3334
{
3435
$resolver->setDefaults(array(
36+
'key_options' => array(),
3537
'value_options' => array(),
3638
'allowed_keys' => null
3739
));
3840

3941
$resolver->setRequired(array('value_type'));
4042
$resolver->setAllowedTypes(array('allowed_keys' => array('null', 'array')));
4143
}
42-
43-
44-
}
44+
}

Form/Type/KeyValueType.php

+2
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,14 @@ public function setDefaultOptions(OptionsResolverInterface $resolver)
4242
'type' => 'burgov_key_value_row',
4343
'allow_add' => true,
4444
'allow_delete' => true,
45+
'key_options' => array(),
4546
'value_options' => array(),
4647
'allowed_keys' => null,
4748
'use_container_object' => false,
4849
'options' => function(Options $options) {
4950
return array(
5051
'value_type' => $options['value_type'],
52+
'key_options' => $options['key_options'],
5153
'value_options' => $options['value_options'],
5254
'allowed_keys' => $options['allowed_keys']
5355
);

Tests/Form/Type/KeyValueTypeTest.php

+27-4
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,21 @@ public function testSubmitValidData()
4343
'key3' => '1',
4444
);
4545

46-
$builder = $this->factory->createBuilder('burgov_key_value', $originalData, array('value_type' => 'text'));
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')));
4750

4851
$form = $builder->getForm();
4952

5053
$this->assertFormTypes(array('text', 'text'), $form);
54+
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);
5155

5256
$form->submit($submitData);
5357
$this->assertTrue($form->isValid(), $form->getErrorsAsString());
5458

5559
$this->assertFormTypes(array('text', 'text', 'text'), $form);
60+
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);
5661

5762
$this->assertSame($expectedData, $form->getData());
5863
}
@@ -67,13 +72,18 @@ public function testWithChoiceType()
6772
$obj2->id = 2;
6873
$obj2->name = 'choice2';
6974

70-
$builder = $this->factory->createBuilder('burgov_key_value', null, array('value_type' => 'choice', 'value_options' => array(
71-
'choice_list' => new ObjectChoiceList(array($obj1, $obj2), 'name', array(), null, 'id')
72-
)));
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+
)));
7382

7483
$form = $builder->getForm();
7584

7685
$this->assertFormTypes(array(), $form);
86+
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);
7787

7888
$form->submit(array(
7989
array(
@@ -87,6 +97,7 @@ public function testWithChoiceType()
8797
));
8898

8999
$this->assertFormTypes(array('choice', 'choice'), $form);
100+
$this->assertFormOptions(array(array('label' => 'label_key'), array('label' => 'label_value')), $form);
90101

91102
$this->assertTrue($form->isValid());
92103

@@ -100,6 +111,18 @@ private function assertFormTypes(array $types, $form)
100111
$this->assertEquals($type, $form->get($key)->get('value')->getConfig()->getType()->getInnerType()->getName());
101112
}
102113
}
114+
115+
private function assertFormOptions(array $options, $form)
116+
{
117+
for ($i = 0; $i < count($form); $i++) {
118+
foreach ($options[0] as $option => $optionValue) {
119+
$this->assertEquals($optionValue, $form->get($i)->get('key')->getConfig()->getOption($option));
120+
}
121+
foreach ($options[1] as $option => $optionValue) {
122+
$this->assertEquals($optionValue, $form->get($i)->get('value')->getConfig()->getOption($option));
123+
}
124+
}
125+
}
103126
}
104127

105128
class ConcreteExtension extends AbstractExtension

0 commit comments

Comments
 (0)