我以前在控制器中使用编辑和更新方法来提交和处理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);
}
由于HTML表单不支持PUT,因此编辑请求使用带有'_method'参数的POST作为'PUT'来代替实际的PUT请求。
现在,我想删除编辑方法,并从前端发送真实的PUT请求。当我使用Postman对此进行测试时,我发现update方法无法处理实际的PUT请求。
当我使用Postman发送POST +'_method'='PUT'请求时,它工作正常,但是当我发送PUT请求时,它显示BAD_REQUEST,这是我代码的最后一行。 isSubmitted()返回false。
我知道我不需要在这里使用Forms,但是在store方法中已经使用过它。是否可以使用它来处理实际的PUT请求?我的更新方法应该改变什么?
答案 0 :(得分:0)
似乎您在$entityManager->merge($category);
方法中缺少update()
。尝试将其添加到$entityManager->flush();
上方,并告诉我们是否可行。
答案 1 :(得分:0)
您需要编写_method而不是方法
$form = $this->createForm(CategoryType::class, $category, ['_method' => 'PUT']);
还需要在刷新之前保留对象