Merge pull request #264 from driebit/embedded-forms

Add support for embedded forms
This commit is contained in:
William Durand 2013-11-14 01:42:43 -08:00
commit 29965ec7bb
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

@ -63,9 +63,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
)
@ -83,9 +95,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
)
@ -103,9 +127,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
)