简短:当实体保存约束失败时,如何设置特定的 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);
}
}