Symfony API: проверьте, есть ли у контента ключи - PullRequest
0 голосов
/ 30 марта 2020

С помощью Symfony я могу получить содержание запроса (POST и application/json) с помощью:

$content = json_decode($request->getContent());

dd($content) return:

[
    "subject" => "test"
    "content" => "content"
]

I просто хочу гидрировать объект объектом, это работает хорошо :

$subject = new SubjectEntity();
$subject->setSubject($content['subject]);

Но я не хочу делать setSubject(), если ключ субъекта не существует.

Я знаю, что могу сделать if для каждой переменной (или $subject->setSubject($content['subject] ?? null)), но я думаю, что это будет немного утомительно в более сложных случаях.

Есть ли способ «проверить» отправленное содержимое, чтобы убедиться, что все необходимые ключи присутствуют?

1 Ответ

0 голосов
/ 31 марта 2020

Самым чистым решением будет проверка параметров параметров запроса с использованием symfony validator

Пример:

public function validateRequest(array $params): array
{
    $validator = Validation::createValidator();

    $constraints = new Assert\Collection([
        'subject' => new Assert\Type('string'),
        'content' => new Assert\Type('string'),
    ]);

    $group = new Assert\GroupSequence(['Default', 'custom']);
    return $validator->validate($params, $constraints, );
}

Если ключи могут быть необязательными, то вы должны используйте Assert\Optional(). В любом случае, вам понадобится оператор объединения нулей, чтобы привести к нулю, если ключ не установлен.

Вы можете поместить их в другой класс, и с помощью небольшого рефакторинга вы можете заставить его работать намного лучше, чем делать множество ifs, и его можно использовать повторно для проверки всех ваших запросов API.

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