我有一个正在Symfony 4框架中编写的应用程序。我有一个PUT / PATCH请求,其中可能包含错误的请求字段。例如,“实体”用户不应包含说明字段。在这种情况下,我想阻止请求并返回错误的请求响应。我想知道在Symfony 4中最好的方法是什么?
In node.js implenentation such problem looks like below:
router.patch('/tasks/:id', async (req, res) => {
const updates = Object.keys(req.body)
// allowed fields
const allowedUpdates = ['description', 'completed']
// check if there are bad fields
const isValidOperation = updates.every((update) => allowedUpdates.includes(update))
if (!isValidOperation) {
return res.status(400).send({ error: 'Invalid updates!' })
}
/*
some response code
/*
})
如何在Symfony 4框架中做类似的事情?
答案 0 :(得分:1)
首先,默认情况下,当选项allow_extra_fields
设置为false(默认值)时,带有额外字段的表单将无法生效,有关此设置的更多信息:https://symfony.com/doc/current/reference/forms/types/form.html#allow-extra-fields
接下来,您可以检查$form->getExtraData()
是否为空数组,这意味着没有多余的字段
如果要找到其他字段以获得错误的请求响应,则可以:
throw new BadRequestHttpException();
或无一例外:
return $this->json(['error' => 'your error'], Response::HTTP_BAD_REQUEST);
return new JsonResponse(['error' => 'your error', Response::HTTP_BAD_REQUEST]);