gpt4 book ai didi

php - symfony2 中的自定义异常行为

转载 作者:可可西里 更新时间:2023-11-01 00:09:14 25 4
gpt4 key购买 nike

我试图找出如何制作自定义异常行为。当我使用

抛出异常时
 throw new \Exception('Error occurred with your request please try again');

我自动获得状态 500 和消息作为内部服务器错误

但是我希望我的响应包含我的异常消息,而不仅仅是内部服务器错误,以便它显示如下内容:

 {
"error":{
"code":500,
"message":"Error occurred with your request please try again"
}
}

最重要的是可能会做一些额外的事情,例如通过电子邮件将错误发​​送给自己。但是,我只希望在抛出\Exception 而不是使用类似

的东西时发生这种情况
    throw new HttpException

有关如何完成此任务的任何帮助或想法。

我还应该提到我没有为此使用 Twig 或任何模板。这是严格的 API 类型响应

最佳答案

看看http://symfony.com/doc/current/cookbook/controller/error_pages.html有足够的信息可以帮助您入门。

简而言之,您应该创建 app/Resources/TwigBundle/views/Exception/exception.json.twig 并且在那里您可以访问 exception.message 和 error_code。

这是给你的解决方案:

{% spaceless %}
{
"error":{
"code": {{ error_code }},
"message":{{ exception.message }}
}
}
{% endspaceless %}

另一种解决方案是使用异常监听器:

namespace Your\Namespace;

use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;

class JsonExceptionListener
{
public function onKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
$data = array(
'error' => array(
'code' => $exception->getCode(),
'message' => $exception->getMessage()
)
);
$response = new JsonResponse($data, $exception->getCode());
$event->setResponse($response);
}
}

更新您的服务配置:

json_exception_listener:
class: Your\Namespace\JsonExceptionListener
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException, priority: 200 }

干杯

关于php - symfony2 中的自定义异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21787482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com