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 时才将所有者设置为当前用户