Использую Symfony 5.0.
Понимаю, что ухожу сильно не туда в попытке задать валидацию для опционального GET параметра.
Нужно валидировать, что параметр param может иметь только true|false значение.
Сейчас у меня взаимоисключающие параграфы в коде - получение GET параметра и приведение его в тип bool нивелирует валидацию, а сырой GET-параметр имеет тип string, а не bool и поэтому валидация не работает как предполагалось.
Наверняка есть более чистый способ, но поиски не дают результата. Подскажите подход или ссылку на пример, пожалуйста.
Запрос: GET /neo/fastest?hazardous=true
Код:
/**
* @Route("/neo/fastest", name="neo_fastest", methods={"GET"})
*/
public function getFastestNearEarthObject(Request $request)
{
$constraints = new Collection([
'hazardous' => [new Optional(new Type(['type' => 'boolean']))],
]);
$errors = $this->validate($request->get('hazardous', false), $constraints);
if ($errors) {
return $this->json($errors, 400);
}
$isHazardous = filter_var($request->get('hazardous', false), FILTER_VALIDATE_BOOLEAN);
//other code
}
/**
* @param $value
* @param $constraints
*
* @return array|void
*/
protected function validate($value, $constraints)
{
$validator = Validation::createValidator();
$violations = $validator->validate($value, $constraints);
$messages = [];
if (0 === count($violations)) {
return;
}
foreach ($violations as $violation) {
/* @var ConstraintViolation $violation */
$messages[] = $violation->getMessage();
}
return $messages;
}