我有一个控制器将json数据响应给另一个应用程序,这是控制器代码:
/**
*
* @Get("/getXXX/{id}")
*/
public function getDataAction($id,Request $request){
$ceService = $this->container->get('comptexpertcews.service');
$employeNumber= $request->get('employeNumber') ;
$url = $this->container->getParameter('serverUri') . $id;
$res = new Response();
$res->setContent($ceService->getCews($url, wsUrl::ws_Headers));
$res->headers->set('Content-TYpe','application/json; charset=UTF-8');
return $res;
}
问题是默认情况下,如果你没有在网址中提供id,symfony上升异常:不路由foundexception,我想要的是处理异常并个性化我的所有者响应,如发送: {"错误" :" id undefined"}而不是symfony的长消息expcetion
答案 0 :(得分:1)
您有两个简单的选择:
不要使用param转换器,从存储库中获取数据,然后将其包装在try catch
中并创建自己的异常/消息
如果这是你想要全局做的事情,你可以实现一个事件监听器来捕获onKernelException
事件并从那里使用它,例如:
public function onKernelException(GetResponseForExceptionEvent $event): void
{
$exception = $event->getException();
if ($exception instanceof NotFoundHttpException) {
$response = $this->resourceNotFoundResponse(json_encode($exception->getMessage()));
}
if (isset($response)) {
$event->setResponse($response);
}
}
您还需要将监听器注册为服务,请参阅此处的文档http://symfony.com/doc/current/event_dispatcher.html