public function testOnRenderErrorCreatesAnApiProblemResponse() { $response = new Response(); $request = new Request(); $request->getHeaders()->addHeaderLine('Accept', 'application/json'); $event = new MvcEvent(); $event->setError(Application::ERROR_EXCEPTION); $event->setRequest($request); $event->setResponse($response); $this->listener->onRenderError($event); $this->assertTrue($event->propagationIsStopped()); $this->assertSame($response, $event->getResponse()); $this->assertEquals(406, $response->getStatusCode()); $headers = $response->getHeaders(); $this->assertTrue($headers->has('Content-Type')); $this->assertEquals('application/problem+json', $headers->get('content-type')->getFieldValue()); $content = json_decode($response->getContent(), true); $this->assertArrayHasKey('status', $content); $this->assertArrayHasKey('title', $content); $this->assertArrayHasKey('describedBy', $content); $this->assertArrayHasKey('detail', $content); $this->assertEquals(406, $content['status']); $this->assertEquals('Not Acceptable', $content['title']); $this->assertContains('www.w3.org', $content['describedBy']); $this->assertContains('accept', $content['detail']); }
/** * {@inheritDoc} * @return RenderErrorListener */ public function createService(ServiceLocatorInterface $serviceLocator) { $config = $serviceLocator->get('Config'); $displayExceptions = false; if (isset($config['view_manager']) && isset($config['view_manager']['display_exceptions'])) { $displayExceptions = (bool) $config['view_manager']['display_exceptions']; } $listener = new RenderErrorListener(); $listener->setDisplayExceptions($displayExceptions); return $listener; }
/** * @param ContainerInterface $container * @return RenderErrorListener */ public function __invoke(ContainerInterface $container) { $config = $container->get('config'); $displayExceptions = false; if (isset($config['view_manager']) && isset($config['view_manager']['display_exceptions'])) { $displayExceptions = (bool) $config['view_manager']['display_exceptions']; } $listener = new RenderErrorListener(); $listener->setDisplayExceptions($displayExceptions); return $listener; }