Added ModelType

This commit is contained in:
William DURAND 2011-05-02 07:54:00 +02:00
commit 58bbbc80d8
2 changed files with 67 additions and 0 deletions

63
Form/Type/ModelType.php Normal file
View file

@ -0,0 +1,63 @@
<?php
namespace Propel\PropelBundle\Form\Type;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormFactoryInterface;
use Propel\PropelBundle\Form\ChoiceList\ModelChoiceList;
use Propel\PropelBundle\Form\EventListener\MergeCollectionListener;
use Propel\PropelBundle\Form\DataTransformer\ModelToIdTransformer;
use Propel\PropelBundle\Form\DataTransformer\ModelsToArrayTransformer;
use Symfony\Component\Form\AbstractType;
class ModelType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
if ($options['multiple']) {
$builder->addEventSubscriber(new MergeCollectionListener())
->prependClientTransformer(new ModelsToArrayTransformer($options['choice_list']));
} else {
$builder->prependClientTransformer(new ModelToIdTransformer($options['choice_list']));
}
}
public function getDefaultOptions(array $options)
{
$defaultOptions = array(
'template' => 'choice',
'multiple' => false,
'expanded' => false,
'relation_map' => null,
'class' => null,
'property' => null,
'choices' => array(),
'preferred_choices' => array(),
'multiple' => false,
'expanded' => false,
);
$options = array_replace($defaultOptions, $options);
if (!isset($options['choice_list'])) {
$defaultOptions['choice_list'] = new ModelChoiceList(
$options['relation_map'],
$options['class'],
$options['property'],
$options['choices']
);
}
return $defaultOptions;
}
public function getParent(array $options)
{
return 'choice';
}
public function getName()
{
return 'model';
}
}

View file

@ -10,6 +10,7 @@
<parameter key="propel.logger.class">Propel\PropelBundle\Logger\PropelLogger</parameter>
<parameter key="propel.data_collector.class">Propel\PropelBundle\DataCollector\PropelDataCollector</parameter>
<parameter key="propel.build_properties.class">Propel\PropelBundle\DependencyInjection\Properties</parameter>
<parameter key="propel.form.type.model.class">Propel\PropelBundle\Form\Type\ModelType</parameter>
</parameters>
<services>
@ -29,5 +30,8 @@
<argument type="service" id="propel.configuration" />
</service>
<service id="propel.form.type.model" class="%propel.form.type.model.class%">
<tag name="form.type" alias="model" />
</service>
</services>
</container>