/** * Visit struct returned by controllers. * * @param mixed $data * * @return \Symfony\Component\HttpFoundation\Response */ public function visit($data) { $this->generator->reset(); $this->generator->startDocument($data); $this->visitValueObject($data); //@todo Needs refactoring! // A hackish solution to enable outer visitors to disable setting // of certain headers in inner visitors, for example Accept-Patch header // which is valid in GET/POST/PATCH for a resource, but must not appear // in the list of resources foreach ($this->response->headers->all() as $headerName => $headerValue) { if ($headerValue[0] === false) { $this->response->headers->remove($headerName); } } $response = clone $this->response; $response->setContent($this->generator->isEmpty() ? null : $this->generator->endDocument($data)); // reset the inner response $this->response = new Response(null, 200); $this->statusCode = null; return $response; }
public function render(Generator $generator, $data) { ini_set('max_execution_time', 0); if (file_exists($data->options['documentRoot'] . '/var/export/.lock')) { throw new ExportInProgressException('Export is running'); } $chunkDir = $this->createChunkDir($data->options['documentRoot']); $chunkDirPath = $data->options['documentRoot'] . '/var/export' . $chunkDir; $chunks = array_chunk($data->contents, $data->options['chunkSize']); $urls = []; touch($data->options['documentRoot'] . '/var/export/.lock'); foreach ($chunks as $id => $chunk) { $chunkPath = $chunkDirPath . $id; $generator->reset(); $generator->startDocument($chunk); $this->contentListElementGenerator->generateElement($generator, $chunk); file_put_contents($chunkPath, $generator->endDocument($chunk)); $urls[] = sprintf('%s/api/ezp/v2/ez_recommendation/v1/exportDownload%s%s', $data->options['host'], $chunkDir, $id); } unlink($data->options['documentRoot'] . '/var/export/.lock'); echo $this->sendYCResponse($urls, $data->options, $chunkDirPath); $generator->reset(); return $generator; }