我在Symfony 5.1.7和$form->submit()中挣扎了10个小时;
我的目标是创建一个JSON API,将数据转换为类似的数组。我已经调试并找到了以下部分。
有人能告诉我我做错了什么吗?
为了测试它,我手动创建了一个PHP数组来提交。
我在Controller中的代码
$form = $this->createForm(AddCommentFormType::class);
$test = [
'content' => 'Test',
'media' => [
[
'path' => '1.png',
],
[
'path' => '2.png',
],
],
'_token' => '3bF4qkiUPjKNuGnbY-ySdO6B2sCLzKcS4ar7auX3Dek',
];
$form->submit($test);
AddCommentFormType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('content', TextareaType::class, [
'constraints' => [
new NotBlank(),
new Length([
'max' => 10000,
]),
],
])
->add('media', CollectionType::class, [
'entry_type' => MediaFormType::class,
'constraints' => [
new Count([
'min' => 1,
'max' => 5,
]),
],
])
->add('_token', HiddenType::class, [
'mapped' => false,
'constraints' => [
new NotBlank(),
],
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'csrf_protection' => false,
]);
}
MediaFormType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('path', TextType::class, [
'constraints' => [
new NotBlank(),
],
])
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Media::class,
]);
}
children[media].data
This collection should contain 1 element or more.
[]
children[media]
This form should not contain extra fields.
[▼
[▼
"path" => "1.png"
]
[▼
"path" => "2.png"
]
]
2条答案
按热度按时间svdrlsy41#
您的表单没有默认数据,因为您使用
Form可以为默认数据带一个额外的参数。这本身不一定是一个问题,默认值是表单的数组(或者非常类似的东西,可能是空字符串而不是null)
但是,
CollectionType
默认情况下不允许添加或删除元素。设置它的选项allow_add
(如果您设置了默认值,还可以选择allow_remove
)将改变这一点。所以最小的变化是:
kqqjbcuj2#
如果你的类型是AddCommentFormType,表单默认情况下期望数据在add_comment_form键中,比如: