Merge pull request #23 from vicb/form2.1

[Form] Updated to sf2.1
This commit is contained in:
William Durand 2012-05-27 14:36:52 -07:00
commit 82813e1ae1
4 changed files with 29 additions and 27 deletions

View File

@ -15,8 +15,9 @@ use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormViewInterface; use Symfony\Component\Form\FormViewInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class DescriptionFieldTypeExtension extends AbstractTypeExtension class DescriptionFormTypeExtension extends AbstractTypeExtension
{ {
/** /**
* {@inheritdoc} * {@inheritdoc}
@ -31,17 +32,17 @@ class DescriptionFieldTypeExtension extends AbstractTypeExtension
*/ */
public function buildView(FormViewInterface $view, FormInterface $form, array $options) public function buildView(FormViewInterface $view, FormInterface $form, array $options)
{ {
$view->set('description', $form->getAttribute('description')); $view->setVar('description', $options['description']);
} }
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
public function getDefaultOptions() public function setDefaultOptions(OptionsResolverInterface $resolver)
{ {
return array( $resolver->setDefaults(array(
'description' => '', 'description' => '',
); ));
} }
/** /**
@ -49,6 +50,6 @@ class DescriptionFieldTypeExtension extends AbstractTypeExtension
*/ */
public function getExtendedType() public function getExtendedType()
{ {
return 'field'; return 'form';
} }
} }

View File

@ -52,18 +52,14 @@ class FormTypeParser
*/ */
public function parse(AbstractType $type) public function parse(AbstractType $type)
{ {
$builder = $this->formFactory->createBuilder($type); $form = $this->formFactory->create($type);
$parameters = array(); $parameters = array();
foreach ($builder->all() as $name => $child) { foreach ($form as $name => $child) {
if ($child instanceof FormBuilder) { $config = $child->getConfig();
$childBuilder = $child;
} else {
$childBuilder = $builder->create($name, $child['type'] ?: 'text', $child['options']);
}
$bestType = ''; $bestType = '';
foreach ($childBuilder->getTypes() as $type) { foreach ($config->getTypes() as $type) {
if (isset($this->mapTypes[$type->getName()])) { if (isset($this->mapTypes[$type->getName()])) {
$bestType = $this->mapTypes[$type->getName()]; $bestType = $this->mapTypes[$type->getName()];
} }
@ -71,8 +67,8 @@ class FormTypeParser
$parameters[$name] = array( $parameters[$name] = array(
'dataType' => $bestType, 'dataType' => $bestType,
'required' => $childBuilder->getRequired(), 'required' => $config->getRequired(),
'description' => $childBuilder->getAttribute('description'), 'description' => $config->getAttribute('description'),
); );
} }

View File

@ -5,7 +5,7 @@
<parameters> <parameters>
<parameter key="nelmio_api_doc.extractor.api_doc_extractor.class">Nelmio\ApiDocBundle\Extractor\ApiDocExtractor</parameter> <parameter key="nelmio_api_doc.extractor.api_doc_extractor.class">Nelmio\ApiDocBundle\Extractor\ApiDocExtractor</parameter>
<parameter key="nelmio_api_doc.form.extension.description_field_type_extension.class">Nelmio\ApiDocBundle\Form\Extension\DescriptionFieldTypeExtension</parameter> <parameter key="nelmio_api_doc.form.extension.description_form_type_extension.class">Nelmio\ApiDocBundle\Form\Extension\DescriptionFormTypeExtension</parameter>
</parameters> </parameters>
<services> <services>
@ -14,8 +14,8 @@
<argument type="service" id="router" /> <argument type="service" id="router" />
<argument type="service" id="annotation_reader" /> <argument type="service" id="annotation_reader" />
</service> </service>
<service id="nelmio_api_doc.form.extension.description_field_type_extension" class="%nelmio_api_doc.form.extension.description_field_type_extension.class%"> <service id="nelmio_api_doc.form.extension.description_form_type_extension" class="%nelmio_api_doc.form.extension.description_form_type_extension.class%">
<tag name="form.type_extension" alias="field" /> <tag name="form.type_extension" alias="form" />
</service> </service>
</services> </services>

View File

@ -13,6 +13,7 @@ namespace Nelmio\ApiDocBundle\Tests\Fixtures\Form;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class TestType extends AbstractType class TestType extends AbstractType
{ {
@ -21,23 +22,27 @@ class TestType extends AbstractType
*/ */
public function buildForm(FormBuilderInterface $builder, array $options) public function buildForm(FormBuilderInterface $builder, array $options)
{ {
$builder->add('a', null, array('description' => 'A nice description')); $builder
$builder->add('b'); ->add('a', null, array('description' => 'A nice description'))
$builder->add($builder->create('c', 'checkbox')); ->add('b')
->add($builder->create('c', 'checkbox'))
;
} }
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
public function getDefaultOptions() public function setDefaultOptions(OptionsResolverInterface $resolver)
{ {
return array( $resolver->setDefaults(array(
'data_class' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test', 'data_class' => 'Nelmio\ApiDocBundle\Tests\Fixtures\Model\Test',
); ));
return;
} }
public function getName() public function getName()
{ {
return ''; return 'test_type';
} }
} }