Add support for embedded forms

This commit is contained in:
David de Boer 2013-10-23 15:45:30 +02:00
parent bef7da0ef9
commit fbe9488963
2 changed files with 45 additions and 3 deletions

View File

@ -102,6 +102,12 @@ class FormTypeParser implements ParserInterface
} elseif ('collection' === $type->getName()) {
if (is_string($config->getOption('type')) && isset($this->mapTypes[$config->getOption('type')])) {
$bestType = sprintf('array of %ss', $this->mapTypes[$config->getOption('type')]);
} else {
// Embedded form collection
$subParameters = $this->parseForm($this->formFactory->create($config->getOption('type')), $name . '[]');
$parameters = array_merge($parameters, $subParameters);
continue 2;
}
}
}

View File

@ -64,9 +64,21 @@ class FormTypeParserTest extends \PHPUnit_Framework_TestCase
'description' => '',
'readonly' => false
),
'collection_type[b]' => array(
'collection_type[b][][a]' => array(
'dataType' => 'string',
'required' => true,
'description' => 'A nice description',
'readonly' => false
),
'collection_type[b][][b]' => array(
'dataType' => 'string',
'required' => true,
'description' => '',
'readonly' => false
),
'collection_type[b][][c]' => array(
'dataType' => 'boolean',
'required' => true,
'description' => '',
'readonly' => false
)
@ -84,9 +96,21 @@ class FormTypeParserTest extends \PHPUnit_Framework_TestCase
'description' => '',
'readonly' => false
),
'b' => array(
'b[][a]' => array(
'dataType' => 'string',
'required' => true,
'description' => 'A nice description',
'readonly' => false
),
'b[][b]' => array(
'dataType' => 'string',
'required' => true,
'description' => '',
'readonly' => false
),
'b[][c]' => array(
'dataType' => 'boolean',
'required' => true,
'description' => '',
'readonly' => false
)
@ -104,9 +128,21 @@ class FormTypeParserTest extends \PHPUnit_Framework_TestCase
'description' => '',
'readonly' => false
),
'b' => array(
'b[][a]' => array(
'dataType' => 'string',
'required' => true,
'description' => 'A nice description',
'readonly' => false
),
'b[][b]' => array(
'dataType' => 'string',
'required' => true,
'description' => '',
'readonly' => false
),
'b[][c]' => array(
'dataType' => 'boolean',
'required' => true,
'description' => '',
'readonly' => false
)