Как в API Platform можно заменить выброшенные исключения ошибками проверки? Согласно этой проблеме , это кажется нерешенным вопросом.
В качестве теста создайте сущность с одним целочисленным свойством. Добавление аннотации @Assert\Positive
подтвердит, что значение является положительным целым числом.
Попытка создать запись с различными значениями ниже приводит к следующему ответу.
Сначала выдается сообщение об ошибке, как и ожидалось, при передаче отрицательного значения:
{ "myInt": -1 }
{
"@context": "/api/contexts/ConstraintViolationList",
"@type": "ConstraintViolationList",
"hydra:title": "An error occurred",
"hydra:description": "myInt: This value should be positive.",
"violations": [
{
"propertyPath": "myInt",
"message": "This value should be positive."
}
]
}
Во-вторых, выбрасывается исключение, а не то, что ожидается, при передаче в строке:
{ "myInt": "A" }
{
"@context": "/api/contexts/Error",
"@type": "hydra:Error",
"hydra:title": "An error occurred",
"hydra:description": "The type of the \"myInt\" attribute must be \"int\", \"string\" given.",
"trace": [
... 771 lines of stack trace ...
]
}
Попытка исправить на основе предыдущего исследования проблемы (добавление denormalizationContext={"disable_type_enforcement"=true}
в @ApiResource) просто приводит к другому исключению.
Если это происходит из-за типа ORM проверка, по-видимому, означает, что вы можете либо создавать сущности с аннотациями ORM для миграций, либо вы должны удалить аннотации ORM и вручную создавать миграции, чтобы можно было полагаться только на ограничения проверки для получения правильных ошибок.
Примечание что это не только для целых чисел. Любое значение, которое не соответствует критериям, определенным в аннотации ORM, вызывает исключение, а не ошибку проверки.
У кого-нибудь есть решение этой проблемы? Обратите внимание, что удаление аннотаций ORM или использование только проверки на стороне клиента не должно быть допустимым решением.