首页 > 解决方案 > 如何保存表单集合(CollectionType)

问题描述

我想保存收集表格。我有一个基本表单 BasePromotionsType,我想在其中保存另一个表单 NumberOfVisitsType。但我有一个错误This form should not contain extra fields。在 debager 中,一个数组出现在我面前number_of_visitsarray:2 [▼ "count_visits" => 10 "count_points" => 100 ]

为了填写表格,我提交了这个 json:

{
  "active": true,
  "use_promotion": true,
  "label": "string",
  "description": "string",
  "picture": 1,
  "available_cities": [
    1
  ],
  "promotions_settings": 1,
  "list_users": [

  ],
  "number_of_visits": {
    "count_visits": 10,
    "count_points": 12
  }
}
public function buildForm(FormBuilderInterface $builder, array $options)
   {

       $builder
           ->add('active', CheckboxType::class, ['label' => 'active', 'required' => false])
           ->add('use_promotion', CheckboxType::class, ['label' => 'Одноразовая/Многоразовая', 'required' => false])
           ->add('label', TextType::class, ['label' => 'Заголовок', 'required' => false])
           ->add('description', TextType::class, ['label' => 'Описание', 'required' => false])
           ->add('picture', IntegerType::class, [
               'invalid_message' => 'avatar is not a valid',
           ])
           ->add('available_cities', CollectionType::class, [
               'entry_type' => IntegerType::class,
               'allow_add' => true,
               'by_reference' => false,
               'allow_delete' => true,
               'prototype' => true,
               'invalid_message' => 'cities is not a valid',
           ])
           ->add('promotions_settings', IntegerType::class, [
               'invalid_message' => 'settings are invalid',
           ])
           ->add('list_users', CollectionType::class, [
               'entry_type' => IntegerType::class,
               'allow_add' => true,
               'by_reference' => false,
               'allow_delete' => true,
               'prototype' => true,
               'invalid_message' => 'cities is not a valid',
           ])
           ->add('number_of_visits', CollectionType::class, [
               'entry_type' => NumberOfVisitsType::class
           ])
           ->add('send', SubmitType::class, ['label' => 'Отправить'])
       ;

       $builder->get('picture')
           ->addModelTransformer($this->avatarTransformer);
       $builder->get('available_cities')
           ->addModelTransformer($this->citiesTransformer);
       $builder->get('promotions_settings')
           ->addModelTransformer($this->promotionsSettingsTransformer);
       $builder->get('list_users')
           ->addModelTransformer($this->usersTransformer);
   }

因此,我需要保留基本形式和内置在基本形式中的形式。

标签: restsymfony

解决方案


我解决了问题,必须在字段number_of_visits中注册

->add('number_of_visits', CollectionType::class, [
                'entry_type' => NumberOfVisitsType::class,
                'invalid_message' => 'number are invalid',
                'allow_add' => true,
                'allow_extra_fields' => true
            ])

推荐阅读