处理并个性化symfony未找到路由异常响应

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

我有一个将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 rise exception:not route foundexception,我想要的是处理异常并使用我的所有者响应(如发送)进行个性化设置
{“error”:“id未定义”}

除了symfony的长消息表达式,您有两个简单的选项:

  • 不要使用param converter,从存储库获取数据,然后您可以将其包装在
    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}除此之外,我已经在这里找到了它: