/** * Renders a file to a response * * @param mixed $file * @param mixed $version Version string or object * @param array $options * @return mixed */ public function render($file, $version, array $options = array()) { $version = Version::get($version); $response = new Response(); if (!$file instanceof File) { $file = $this->fileRepository->find($file); if (!$file) { return $this->adaptResponse($response->setStatusCode(404), $version, null); } } // Renderer / authorization evil tag team try { $event = new FileEvent($file); $this->eventDispatcher->dispatch(Events::RENDERER_BEFORE_RENDER, $event); } catch (AccessDeniedException $e) { return $this->adaptResponse($response->setStatusCode(403), $version, $file); } try { $provider = $this->profiles->getVersionProvider($file, $version); $version = $provider->ensureValidVersion($version); } catch (InvalidVersionException $e) { return $this->adaptResponse($response->setStatusCode(404), $version, null); } if (!$this->versionIsObtainable($file, $version)) { return $this->adaptResponse($response->setStatusCode(404), $version, $file); } $options = $this->mergeOptions($options); if ($options['download'] == true) { $response->setHeader('Content-disposition', "attachment; filename={$file->getName()}"); } $retrieved = new FileObject($this->retrieve($file, $version)); $response->setHeader('Content-Type', $retrieved->getMimetype()); $this->injectContentToResponse($retrieved, $response); return $this->adaptResponse($response, $version, $file); }
/** * @test */ public function adaptResponseShouldConvertInternalErrorResponseToSymfonyResponse() { $iResponse = new InternalResponse(); $iResponse->setContent('tussi'); $iResponse->setStatusCode(404); $iResponse->setHeader('gran', 'oculusso'); $adapter = new SymfonyRendererAdapter(); $response = $adapter->adaptResponse($iResponse); $this->assertInstanceOf('Symfony\\Component\\HttpFoundation\\Response', $response); $this->assertTrue($response->headers->has('gran')); $this->assertSame('Not Found', $response->getContent()); $this->assertSame(404, $response->getStatusCode()); }