CollectionTypes和事件监听器Symfony 2.8

时间:2016-05-12 09:20:37

标签: jquery ajax symfony symfony-forms

我有一个字段列表,每个字段都可以是"选择"或"电台"的按钮。

所以我有一个collectionType ProductOptions,集合的每个元素都是一个OptionGroup,其结果是一个entityType

  • optionGroup.name:select(optionElements)
  • optionGroup.name:radio(optionElements) ...

使用POST_SET_DATA设置一个OptionGroup(entityType)的optionElements。

我现在想要做的是,当第一个entityType被更改时,第二个实体将使用optionElements(带有ajax)提交,依此类推......

如果我们填充了5个entityTypes并且我们更改了第一个,则将删除下一个4(例如,在jquery中隐藏)

怎么可能这样做? 提前谢谢。

   public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder
    ->add('productOptionGroups', CollectionType::class, array(
        'entry_type' => ProductOptionGroupType::class,
        'label' => false,
        'required' => true,
    ));
}

和选项组

    public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder->addEventListener(FormEvents::POST_SET_DATA, function ($event) {
        $builder = $event->getForm();
        $entity = $event->getData();
        $optionGroup = $entity->getOptionGroup();
        $optionType = $optionGroup->getOptionType();
        $elements = $entity->getOptionElements(); // or a query builder

        if($optionType == OptionGroup::OPTIONGROUP_TYPE_SELECT){
        $builder
        ->add('elements', EntityType::class, array(
            'class' => 'AnaShopBundle:OptionElement',
            'choices' => $elements,
            'label' => $optionGroup,
            'required' => true,
            'property' => 'name',
            'mapped' => false,

        ));
        } elseif ($optionType == OptionGroup::OPTIONGROUP_TYPE_RADIO) {
            $builder
            ->add('elements', EntityType::class, array(
                'class' => 'AnaShopBundle:OptionElement',
                'choices' => $elements,
                'label' => $optionGroup,
                'expanded' => true,
                'required' => true,
                'property' => 'name',
                'mapped' => false,
            ));
        } 

    });
}

0 个答案:

没有答案