Symfony 4 - isValid 总是 returns false
Symfony 4 - isValid always returns false
我正在尝试使用 $form->isValid()
验证我的表单。但即使我的表格是正确的,它 returns 也是错误的。我已经尝试使用 $form->getErrors(true)
转储我的错误,但是我的请求超时了。
我的CreateController.php:
class CreateController extends Controller
{
/**
* @Method({"POST"})
* @Route("/api/v1/matches", name="api_v1_matches_create")
*/
public function index(Request $request, EntityManagerInterface $em): JsonResponse
{
$data = json_decode($request->getContent(), true);
$match = new Match();
$form = $this->createForm(MatchFormType::class, $match);
$form->submit($data);
if ($form->isValid()) {
$em->persist($match);
$em->flush();
return new JsonResponse(null, 201);
} else {
return new JsonResponse(null, 400);
}
}
}
我的Form.php
class MatchFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'heroes',
EntityType::class,
[
'class' => Hero::class,
]
)
->add(
'season',
EntityType::class,
[
'class' => Season::class,
]
)
->add(
'map',
EntityType::class,
[
'class' => Map::class,
]
);
}
public function getName(): string
{
return 'match';
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Match::class,
]);
}
}
JSON 到 POST
{
"map": 1,
"heroes": [
1,
2
],
"season": 1
}
在此先感谢您的帮助!
我通过将 'multiple' => true
添加到我的 heroes 条目来修复它,因此表单知道它是一个数组并通过禁用 CSRF 保护('csrf_protection' => false
作为 $resolver 中的参数)。
我相信您可能希望遵循此处文档中描述的做法 https://symfony.com/doc/4.1/forms.html#handling-form-submissions
将文章示例分成您可能需要的案例步骤:
- 创建一个新的表单对象
- 处理 http 请求
- 检查表单是否正在提交并且是否有效
- 如果满足前面的条件,获取表单数据并将其刷新到数据库
我正在尝试使用 $form->isValid()
验证我的表单。但即使我的表格是正确的,它 returns 也是错误的。我已经尝试使用 $form->getErrors(true)
转储我的错误,但是我的请求超时了。
我的CreateController.php:
class CreateController extends Controller
{
/**
* @Method({"POST"})
* @Route("/api/v1/matches", name="api_v1_matches_create")
*/
public function index(Request $request, EntityManagerInterface $em): JsonResponse
{
$data = json_decode($request->getContent(), true);
$match = new Match();
$form = $this->createForm(MatchFormType::class, $match);
$form->submit($data);
if ($form->isValid()) {
$em->persist($match);
$em->flush();
return new JsonResponse(null, 201);
} else {
return new JsonResponse(null, 400);
}
}
}
我的Form.php
class MatchFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'heroes',
EntityType::class,
[
'class' => Hero::class,
]
)
->add(
'season',
EntityType::class,
[
'class' => Season::class,
]
)
->add(
'map',
EntityType::class,
[
'class' => Map::class,
]
);
}
public function getName(): string
{
return 'match';
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Match::class,
]);
}
}
JSON 到 POST
{
"map": 1,
"heroes": [
1,
2
],
"season": 1
}
在此先感谢您的帮助!
我通过将 'multiple' => true
添加到我的 heroes 条目来修复它,因此表单知道它是一个数组并通过禁用 CSRF 保护('csrf_protection' => false
作为 $resolver 中的参数)。
我相信您可能希望遵循此处文档中描述的做法 https://symfony.com/doc/4.1/forms.html#handling-form-submissions
将文章示例分成您可能需要的案例步骤:
- 创建一个新的表单对象
- 处理 http 请求
- 检查表单是否正在提交并且是否有效
- 如果满足前面的条件,获取表单数据并将其刷新到数据库