Как сохранить коллекцию формы (CollectionType) - PullRequest
0 голосов
/ 17 июня 2019

Я хочу сохранить форму коллекции. У меня есть базовая форма BasePromotionsType, в которой я хочу сохранить другую форму NumberOfVisitsType. Но у меня ошибка с This form should not contain extra fields. В дебагере мне приходит массив в поле number_of_visits: array: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);
   }

В результате мне нужно сохранить базовую форму и форму, встроенную в базовую форму.

1 Ответ

0 голосов
/ 18 июня 2019

Я решил проблему, нужно было зарегистрироваться в поле 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
            ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...