Обработка запросов PUT с помощью формы Symfony 4 - PullRequest
0 голосов
/ 07 января 2019

Я использовал методы редактирования и обновления в моем контроллере для отправки и обработки отправки формы PUT. Он работает нормально, и код выглядит так,

public function edit(Category $category): Response
{
    $form = $this->createForm(CategoryType::class, $category, [
        'action' => $this->generateUrl('category_update', [
            'id' => $category->getId(),
        ]),
        'method' => 'PUT',
    ]);

    return $this->render('category/edit.html.twig', [
        'category_form' => $form->createView(),
    ]);
}

public function update(Category $category, Request $request): Response
{
    $form = $this->createForm(CategoryType::class, $category, ['method' => 'PUT']);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->flush();

        return new Response('', Response::HTTP_NO_CONTENT);
    }

    return new Response('', Response::HTTP_BAD_REQUEST);
}

Поскольку PUT не поддерживается в HTML-формах, запрос на редактирование использует POST с параметром '_method' в качестве 'PUT' вместо реального запроса PUT.

Теперь я хочу удалить метод редактирования и отправить реальный запрос PUT из внешнего интерфейса. Когда я использовал Postman для проверки этого, я обнаружил, что метод обновления не может обработать реальный запрос PUT.

Когда я использую Postman для отправки запросов POST + '_method' = 'PUT', он работает нормально, но когда я отправляю запросы PUT, он показывает BAD_REQUEST, который является последней строкой в ​​моем коде. isSubmitted () возвращает false.

Я знаю, что мне не нужно использовать здесь формы, но они были использованы в методе store. Можно ли использовать его для обработки реального запроса PUT? Что я должен изменить в своем методе обновления?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Вам нужно написать _method вместо метода

$form = $this->createForm(CategoryType::class, $category, ['_method' => 'PUT']);

Также вам необходимо сохранить объект, прежде чем смывать

0 голосов
/ 07 января 2019

Похоже, вам не хватает $entityManager->merge($category); в методе update(). Попробуйте добавить его выше $entityManager->flush(); и сообщите нам, работает ли он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...