为 Symfony 约束验证失败设置 http 代码



简短:当实体保存约束失败时,如何设置特定的 http 错误代码,而不是通用的 500?

我正在使用Symfony自定义约束@UniqueEntity(http://symfony.com/doc/current/reference/constraints/UniqueEntity.html)来断言保存实体时某些数据不会重复。

如果此约束检查导致违规,我会得到 500 http 代码,而其他代码可能更合适,例如 409 - 冲突 (https://httpstatuses.com/409)。

我似乎找不到任何有关如何覆盖验证响应的文档。

提前感谢您的任何建议。

也许你可以创建一个事件的监听器:kernel.exception

然后你会得到类似的东西:

<?php
public function onKernelException(GetResponseForExceptionEvent $event)
{
      $e = $event->getException();
      if ($e instanceof NameOfTheException) {
            // logic here
            return (new Response())
                  ->setStatusCode(409)
            ;
      }
}

只需在控制器中捕获异常:

public function saveAction()
{
    try {
       $entity = new Entity('duplicate name');
       $this->entityManager->persist($entity);
       $this->entityManager->flush();
       return new Response();
    } catch(UniqueConstraintViolationException $e) {
       return new Response('Entity with same name already exists', Response::HTTP_CONFLICT);
    } catch (Exception $e) {
       return new Response('Internal error', Response::HTTP_INTERNAL_SERVER_ERROR);
    }
}

最新更新