Added ModelType
This commit is contained in:
parent
b041a9973b
commit
58bbbc80d8
2 changed files with 67 additions and 0 deletions
63
Form/Type/ModelType.php
Normal file
63
Form/Type/ModelType.php
Normal 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';
|
||||
}
|
||||
}
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue