Symfony 4 - isValid всегда возвращает false

Я пытаюсь проверить свою форму с помощью $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
}

Заранее спасибо за вашу помощь!

«но затем истекло время ожидания моего запроса» - это говорит о том, что происходит какая-то бесконечная рекурсия / цикл. Можете ли вы включить XDebug и посмотреть, какая трассировка вызовов сбрасывается, когда ваш запрос упирается в стену?

Jovan Perovic 06.07.2018 21:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
899
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я исправил это, добавив 'multiple' => true в запись моих героев, чтобы форма знала, что это массив, и отключив защиту CSRF ('csrf_protection' => false как параметр в $ resolver).

Я считаю, что вы можете следовать методам, описанным в документации здесь https://symfony.com/doc/4.1/forms.html#handling-form-submissions

Разделив пример статьи на шаги в вашем случае, вы можете захотеть:

  1. Создать новый объект формы
  2. Обработать HTTP-запрос
  3. Убедитесь, что форма отправляется и действительна
  4. Если предыдущее условие выполнено, получить данные формы и сбросить их в базу данных

Другие вопросы по теме