Ошибки валидации платформы API в сравнении с исключениями ORM - PullRequest
0 голосов
/ 02 апреля 2020

Как в 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 или использование только проверки на стороне клиента не должно быть допустимым решением.

...