FOSRestBundle FormType 将 JsonArray 转换为 ArrayCollection

Posted

技术标签:

【中文标题】FOSRestBundle FormType 将 JsonArray 转换为 ArrayCollection【英文标题】:FOSRestBundle FormType convert JsonArray to ArrayCollection 【发布时间】:2020-10-31 21:46:58 【问题描述】:

您好,我目前正在创建一个 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】:

将我的 DTO 更改为(将 ArrayCollection 替换为普通数组)

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

添加

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

解决了我的问题。

【讨论】:

以上是关于FOSRestBundle FormType 将 JsonArray 转换为 ArrayCollection的主要内容,如果未能解决你的问题,请参考以下文章

如何扩展 FOSRestBundle RequestBodyParamConverter?

仅当 FormType 为 Create 时才将所有者设置为当前用户

检索Controller中单个FormType的值

无法使用 FOSRestBundle

无法使用 Symfony 5 安装 FOSRestBundle

FOSRestBundle 不加载路由