处理和个性化symfony没有路由发现异常响应

时间:2017-06-02 09:33:13

标签: symfony 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;
    }

问题是默认情况下,如果你没有在网址中提供id,symfony上升异常:不路由foundexception,我想要的是处理异常并个性化我的所有者响应,如发送: {"错误" :" id undefined"}而不是symfony的长消息expcetion

1 个答案:

答案 0 :(得分:1)

您有两个简单的选择:

  1. 不要使用param转换器,从存储库中获取数据,然后将其包装在try catch中并创建自己的异常/消息

  2. 如果这是你想要全局做的事情,你可以实现一个事件监听器来捕获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);
        }
    }
    
  3. 您还需要将监听器注册为服务,请参阅此处的文档http://symfony.com/doc/current/event_dispatcher.html