Removed MergeCollectionListener because merging is done in the model

This commit is contained in:
pierreyves.lebecq 2011-09-27 15:42:22 +02:00
parent 7fb0de3574
commit a5ddda4de4
2 changed files with 1 additions and 52 deletions

View file

@ -1,50 +0,0 @@
<?php
/**
* This file is part of the PropelBundle package.
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* @license MIT License
*/
namespace Propel\PropelBundle\Form\EventListener;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\Event\FilterDataEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class MergeCollectionListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(FormEvents::BIND_NORM_DATA => 'onBindNormData');
}
public function onBindNormData(FilterDataEvent $event)
{
$collection = $event->getForm()->getData();
$data = $event->getData();
if (!$collection) {
$collection = $data;
} else if (count($data) === 0) {
$collection->clear();
} else {
// merge $data into $collection
foreach ($collection as $i => $model) {
if (false === $key = $data->search($model)) {
$collection->remove($i);
} else {
$data->remove($key);
}
}
foreach ($data as $model) {
$collection->append($model);
}
}
$event->setData($collection);
}
}

View file

@ -23,8 +23,7 @@ class ModelType extends AbstractType
public function buildForm(FormBuilder $builder, array $options)
{
if ($options['multiple']) {
$builder->addEventSubscriber(new MergeCollectionListener())
->prependClientTransformer(new ModelsToArrayTransformer($options['choice_list']));
$builder->prependClientTransformer(new ModelsToArrayTransformer($options['choice_list']));
} else {
$builder->prependClientTransformer(new ModelToIdTransformer($options['choice_list']));
}