处理和个性化 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

您有两个简单的选择:

  1. 不要使用参数转换器,从存储库中获取数据,然后您可以将其包装在 try catch 中并创建您自己的 exception/message

  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);
        }
    }
    

您还需要将侦听器注册为服务,请参阅此处的文档 http://symfony.com/doc/current/event_dispatcher.html