. */ namespace App\Helpers; use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\File\File; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; class LabelResponse extends Response { public function __construct($content = '', int $status = 200, array $headers = []) { parent::__construct($content, $status, $headers); } public function setContent($content) { parent::setContent($content); $this->setAutoEtag(); $this->setAutoLastModified(); return $this; } public function prepare(Request $request) { parent::prepare($request); $this->headers->set('Content-Type','application/pdf'); if ('HTTP/1.0' !== $request->server->get('SERVER_PROTOCOL')) { $this->setProtocolVersion('1.1'); } $this->ensureIEOverSSLCompatibility($request); return $this; } /** * Automatically sets the Last-Modified header according the file modification date. */ public function setAutoLastModified() { $this->setLastModified(new \DateTime()); return $this; } /** * Automatically sets the ETag header according to the checksum of the file. */ public function setAutoEtag() { $this->setEtag(base64_encode(hash('sha256', $this->content, true))); return $this; } /** * Sets the Content-Disposition header with the given filename. * * @param string $disposition ResponseHeaderBag::DISPOSITION_INLINE or ResponseHeaderBag::DISPOSITION_ATTACHMENT * @param string $filename Optionally use this UTF-8 encoded filename instead of the real name of the file * @param string $filenameFallback A fallback filename, containing only ASCII characters. Defaults to an automatically encoded filename * * @return $this */ public function setContentDisposition($disposition, $filename, $filenameFallback = '') { if ('' === $filenameFallback && (!preg_match('/^[\x20-\x7e]*$/', $filename) || false !== strpos($filename, '%'))) { $encoding = mb_detect_encoding($filename, null, true) ?: '8bit'; for ($i = 0, $filenameLength = mb_strlen($filename, $encoding); $i < $filenameLength; ++$i) { $char = mb_substr($filename, $i, 1, $encoding); if ('%' === $char || \ord($char) < 32 || \ord($char) > 126) { $filenameFallback .= '_'; } else { $filenameFallback .= $char; } } } $dispositionHeader = $this->headers->makeDisposition($disposition, $filename, $filenameFallback); $this->headers->set('Content-Disposition', $dispositionHeader); return $this; } }