Я пытаюсь проверить свою форму с помощью $form->isValid(). Но даже если моя форма верна, она возвращает false. Я уже пытался сбросить свои ошибки с помощью $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 в запись моих героев, чтобы форма знала, что это массив, и отключив защиту CSRF ('csrf_protection' => false как параметр в $ resolver).
Я считаю, что вы можете следовать методам, описанным в документации здесь https://symfony.com/doc/4.1/forms.html#handling-form-submissions
Разделив пример статьи на шаги в вашем случае, вы можете захотеть:
«но затем истекло время ожидания моего запроса» - это говорит о том, что происходит какая-то бесконечная рекурсия / цикл. Можете ли вы включить
XDebugи посмотреть, какая трассировка вызовов сбрасывается, когда ваш запрос упирается в стену?