public function onKernelException(GetResponseForExceptionEvent $event) { $this->logger->notice(sprintf('Exceptions catcher listener: catch kernel.exception event (exception: %s)', $event->getException()->getMessage())); // If this is not a master request, skip handling if (!$event->isMasterRequest()) { $this->logger->debug('Exceptions catcher listener: this is not master request, skip'); return; } // If content already prepared if ($event->hasResponse()) { $this->logger->debug('Exceptions catcher listener: event already has response, skip'); return; } // Getting action $apiServerAction = $event->getRequest()->attributes->get('apiAction'); /* @var $apiServerAction ApiServerAction */ // Something wrong if (!$apiServerAction) { $this->logger->error('Request parser listener: request has no apiAction attribute, sending empty response'); $event->setResponse(new JsonResponse([])); return; } // Getting api server interface $apiServerInterface = $apiServerAction->getApiServerInterface(); // Creating api response $apiResponse = $apiServerInterface->getExceptionResponse($event->getException()->getMessage()); // Setting response $event->setResponse(new JsonResponse($apiResponse->export())); }
public function testOnKernelException() { $driver = new FailDriver(); $exception = AuthorizationException::from($driver); $request = new Request(); $response = new Response(); $resolver = $this->newResolver(); $this->listener->addResolver($resolver); $resolver->expects($this->once())->method('supportsDriver')->with($driver)->will($this->returnValue(true)); $resolver->expects($this->once())->method('supportsException')->with($exception)->will($this->returnValue(true)); $resolver->expects($this->once())->method('onException')->with($exception, $request)->will($this->returnValue($response)); $kernel = $this->getMockBuilder('Symfony\\Component\\HttpKernel\\HttpKernelInterface')->disableOriginalConstructor()->getMock(); $event = new GetResponseForExceptionEvent($kernel, $request, HttpKernelInterface::MASTER_REQUEST, $exception); $this->assertFalse($event->hasResponse()); $this->listener->onKernelException($event); $this->assertTrue($event->hasResponse()); }