Запрос PUT / PATCH с недопустимыми полями - PullRequest
0 голосов
/ 01 июля 2019

У меня есть приложение, которое я пишу в среде Symfony 4.У меня есть запрос PUT / PATCH, который может содержать неправильные поля запроса.Например, пользователь Entities не должен содержать поля description .В такой ситуации я бы хотел заблокировать запрос и вернуть неверный ответ на запрос.Интересно, как лучше всего это сделать в 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?

1 Ответ

1 голос
/ 01 июля 2019

сначала, по умолчанию, когда для параметра 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]);
...