4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\Form\Extension\Core\Type
;
14 use Symfony\Component\Form\AbstractType
;
15 use Symfony\Component\Form\FormBuilderInterface
;
16 use Symfony\Component\Form\FormView
;
17 use Symfony\Component\Form\FormInterface
;
18 use Symfony\Component\Form\Extension\Core\EventListener\ResizeFormListener
;
19 use Symfony\Component\OptionsResolver\Options
;
20 use Symfony\Component\OptionsResolver\OptionsResolverInterface
;
22 class CollectionType
extends AbstractType
27 public function buildForm(FormBuilderInterface
$builder, array $options)
29 if ($options['allow_add'] && $options['prototype']) {
30 $prototype = $builder->create($options['prototype_name'], $options['type'], array_replace(array(
31 'label' => $options['prototype_name'].'label__',
32 ), $options['options']));
33 $builder->setAttribute('prototype', $prototype->getForm());
36 $resizeListener = new ResizeFormListener(
39 $options['allow_add'],
40 $options['allow_delete']
43 $builder->addEventSubscriber($resizeListener);
49 public function buildView(FormView
$view, FormInterface
$form, array $options)
51 $view->vars
= array_replace($view->vars
, array(
52 'allow_add' => $options['allow_add'],
53 'allow_delete' => $options['allow_delete'],
56 if ($form->getConfig()->hasAttribute('prototype')) {
57 $view->vars
['prototype'] = $form->getConfig()->getAttribute('prototype')->createView($view);
64 public function finishView(FormView
$view, FormInterface
$form, array $options)
66 if ($form->getConfig()->hasAttribute('prototype') && $view->vars
['prototype']->vars
['multipart']) {
67 $view->vars
['multipart'] = true;
74 public function setDefaultOptions(OptionsResolverInterface
$resolver)
76 $optionsNormalizer = function (Options
$options, $value) {
77 $value['block_name'] = 'entry';
82 $resolver->setDefaults(array(
84 'allow_delete' => false,
86 'prototype_name' => '__name__',
91 $resolver->setNormalizers(array(
92 'options' => $optionsNormalizer,
99 public function getName()