我做了一个控制器来提供一些JSON的web服务,我想在Symfony抛出异常时提供一些错误信息(错误500),我怎么能写出这样的东西?
Web服务的主要目的是更新调用者在POST值中提供的Symfony DB中的信息。
在我的控制器中我返回JSON中的响应,我想处理Symfony异常(比如提供的值或不符合设计的模式)以返回有关错误的详细信息。
我考虑过对每个值进行测试但是编写时间很长,而不是简单的代码来阅读或使用try / catch系统,但我认为Symfony已经提供了这样的功能。
你怎么看?Thx:)
答案 0 :(得分:1)
我认为您应该使用EventListener
来捕获错误并返回正确的响应。
您可以将其放在SomethingBundle/EventListener
文件夹中,还需要定义service
以便Symfony加载。
更多信息:Event Listener
我希望我能帮助你,如果你认为我错了,请告诉我。祝你好运!
修改强>
如果您只想捕获特定控制器(例如)Webservice
中名为SomethingBundle
的控制器内的错误,则必须在执行任何操作之前进行检查:
public function onKernelException(GetResponseForExceptionEvent $event)
{
$request = $event->getRequest();
if($this->getBundle($request) == "Something" && $this->getController($request) == "Webservice")
{
// Do your magic
//...
}
}
private function getBundle(Request $request)
{
$pattern = "#([a-zA-Z]*)Bundle#";
$matches = array();
preg_match($pattern, $request->get('_controller'), $matches);
return (count($matches)) ? $matches[0] : null;
}
private function getController(Request $request)
{
$pattern = "#Controller\\\([a-zA-Z]*)Controller#";
$matches = array();
preg_match($pattern, $request->get('_controller'), $matches);
return (count($matches)) ? $matches[1] : null;
}
DANGER 此代码未经过测试,只是您构建自己的代码的一种方法。但是,如果我有问题,请告诉我。我想保持我的例子清洁。
答案 1 :(得分:0)
在沙盒中使用JsonResponse
Symfony类:
use Symfony\Component\HttpFoundation\JsonResponse;
$data = array(); // array of returned response, which encode to JSON
$data['error_message'] = 'Bad request or your other error...');
$response = new JsonResponse($data, 500); // 500 - response status
return $response;