处理和个性化 symfony 找不到路由异常响应
handle and personalize symfony no route found exception response
我有一个控制器向另一个应用程序响应 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;
}
问题是默认情况下,如果你不在 url 中提供 id,symfony 上升异常:不是路由发现异常,我想要的是处理异常并根据我的所有者响应进行个性化设置,例如发送
{"error" :" id undefined "}
而不是 symfony 的长消息 expcetion
您有两个简单的选择:
不要使用参数转换器,从存储库中获取数据,然后您可以将其包装在 try catch
中并创建您自己的 exception/message
如果这是你想在全球范围内做的事情,你可以实现一个事件监听器来捕获 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
我有一个控制器向另一个应用程序响应 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;
}
问题是默认情况下,如果你不在 url 中提供 id,symfony 上升异常:不是路由发现异常,我想要的是处理异常并根据我的所有者响应进行个性化设置,例如发送
{"error" :" id undefined "}
而不是 symfony 的长消息 expcetion
您有两个简单的选择:
不要使用参数转换器,从存储库中获取数据,然后您可以将其包装在
try catch
中并创建您自己的 exception/message如果这是你想在全球范围内做的事情,你可以实现一个事件监听器来捕获
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