处理并个性化symfony未找到路由异常响应
我有一个将json数据响应到另一个应用程序的控制器,以下是控制器代码:处理并个性化symfony未找到路由异常响应,symfony,exception,response,Symfony,Exception,Response,我有一个将json数据响应到另一个应用程序的控制器,以下是控制器代码: /** * * @Get("/getXXX/{id}") */ public function getDataAction($id,Request $request){ $ceService = $this->container->get('comptexpertcews.service'); $employeNumber= $request
/**
*
* @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 rise exception:not route foundexception,我想要的是处理异常并使用我的所有者响应(如发送)进行个性化设置
{“error”:“id未定义”}
除了symfony的长消息表达式,您有两个简单的选项:
try catch
中,并创建自己的异常/消息OnKerneleException
事件,并从那里使用它,例如:
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);
}
}
您还需要将您的侦听器注册为服务,请参阅此处的文档尝试谷歌我想个性化控制器中的响应而不是twig页面中的错误,我根本不使用twig在路由配置中设置$id参数的默认值(以便symfony不会抛出错误),然后在你的操作中自己处理它(或者抽象到其他地方)ok:)的可能副本你能看看上面的链接并告诉我这里的优先级是什么吗:-{name:kernel.event\u listener,event:kernel.exception,method:onKernelException,priority:200}除此之外,我已经在这里找到了它: