Ошибка платформы API с ненулевым полем - PullRequest
3 голосов
/ 08 января 2020

У меня есть простая сущность

 /**
 * @var string|null
 *
 * @ORM\Column(name="city", type="string", length=255, nullable=false)
 * @Assert\NotNull()
 */
private $city;

 ...

  /**
 * @param string|null $city
 * @return CustomerAddressList
 */
public function setCity(?string $city): CustomerAddressList
{
    $this->city = $city;
    return $this;
}

Если я попытаюсь передать null в поле city, результатом будет исключение времени выполнения вместо ошибки проверки:

{
  "@context": "/api/v2/contexts/Error",
  "@type": "hydra:Error",
  "hydra:title": "An error occurred",
  "hydra:description": "The type of the address attribute must be string, NULL given."
}

Если я изменю nullable=false на true, тогда все будет нормально, но это неприемлемое решение.

Как это исправить?

1 Ответ

2 голосов
/ 09 января 2020

Нашел решение.

* @ApiResource(
*     denormalizationContext={"disable_type_enforcement"=false}
* )

Добавление denormalizationContext с "disable_type_enforcement"=false отключает проверку запроса с помощью Doctrine аннотаций.

{
    "@context": "/api/v2/contexts/ConstraintViolationList",
    "@type": "ConstraintViolationList",
    "hydra:title": "An error occurred",
    "hydra:description": "city: This value should be not null",
    "violations": [
    {
    "propertyPath": ".city",
    "message": "This value should be not null."
},

Если необходимо принудительно введите поле определенного типа c, тогда необходимо добавить @Assert\Type(...) как ранее Symfony 4.3

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