FOSRestBundle FormType преобразовывает JsonArray в ArrayCollection - PullRequest
0 голосов
/ 11 июля 2020

Привет, я сейчас создаю Rest Api, и я хочу получить что-то вроде этого:

{"collection": [1,2,3]}

Я придумал что-то вроде этого:

    public function postDTOAction(Request $request) {
        $form = $this->createForm(DTOType::class);
        $form->submit($request->request->all());
        if ($form->isValid()) {
            return $this->view($form->getData());
        }

        return  $this->view($form);
    }

class DTO {
   public ArrayCollection $collection;
   public function __construct()
   {
       $this->collection = new ArrayCollection();
   }
}

class DTOType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('collection');
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => DTO::class,
            'csrf_protection' => false
        ]);

    }
}

почему-то это не кажется для работы, и я получаю сообщение об ошибке, что collection является недопустимым типом.

1 Ответ

0 голосов
/ 11 июля 2020

Изменение моего DTO на (замена ArrayCollection на простой массив)

class DTO {
   public array $collection;
   public function __construct()
   {
       $this->collection = [];
   }
}

и добавление

$builder->add('collection', CollectionType::class, ['allow_add' => true]);

решило мою проблему.

...