如何从symfony选择类型中获取选项

时间:2014-10-24 20:33:06

标签: symfony

我有以下用例:

用户可以从下拉列表中选择选项,但是如果他们想要选择其他人可以选择的其他内容,则会显示一个Javascript prompt(),然后将其添加为{{ 1}}到option并选中。

dropdown

我的问题是如何在加载页面时将此值加载到select中。我可以看到我可以使用

select

将额外元素添加到列表中,但是如何获取现有元素列表?我确定我不必再对它们进行编码,但我无法找到获取选项列表的路线。

这是下拉列表的类别:

 $builder->addEventListener(
    FormEvents::PRE_SET_DATA,

所以重新解释一下我的问题,对于这段代码:

use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class HeatGeneratedFormType extends AbstractType
{
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(
            array('choices'=> 
                array(
                    null=> 'Select',
                    'Grasses / Straw'   => 'Grasses / Straw',
                    'Wood Chip' => 'Wood Chip',
                    'Wood Logs'   => 'Wood Logs',
                    'Wood Pellets'   => 'Wood Pellets',
                    'Other' => 'Other'
                    )
                )
            );
    }

    public function getParent()
    {
        return 'choice';
    }

    public function getName()
    {
        return 'HeatGenerated';
    }
}

if (!in_array($object->getHeatGenerated(), $form->get('heatGenerated')->getChoices()) { $form->get('heatGenerated')->addChoice($object->getHeatGenerated()); } ->getChoices()不是真正的方法,我如何使用它来获取和编辑选项列表?

1 个答案:

答案 0 :(得分:0)

这就是我的所作所为:

class MyFormType extends AbstractType
{  
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            // other fields chopped
            ->add('myField', new CustomChoiceFormType()) // This type has the preset choices
            ;

            $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
                $data = $event->getData();
                $form = $event->getForm();

                $choices = $form->get('myField')->getConfig()->getOption('choices');
                $choice = $data->getMyField();

                if (!in_array($choice, $choices)) {
                    $newChoices = array_merge($choices, array($choice=>$choice)); // Need to add the key and the value, for me these are the same, but ofcourse they could be different

                    $form->remove('myField');
                    $form->add('myField', 'choice', array('choices'=>$newChoices));
                }

            });
    }
}