diff --git a/src/Response.php b/src/Response.php index fbe5158..69ef643 100644 --- a/src/Response.php +++ b/src/Response.php @@ -4,6 +4,7 @@ use League\JsonGuard; use RREST\Validator\JsonValidator; +use Symfony\Component\HttpFoundation\File\File; use Symfony\Component\Serializer\Serializer; use Symfony\Component\Serializer\Encoder\XmlEncoder; use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; @@ -18,6 +19,11 @@ class Response */ protected $content; + /** + * @var string|File|\SplFileInfo + */ + protected $file; + /** * @var string */ @@ -62,6 +68,14 @@ public function __construct(RouterInterface $router, $format, $statusCode) $this->setStatusCode($statusCode); } + /** + * @param string|File|\SplFileInfo $file + */ + public function setFile($file) + { + $this->file = $file; + } + /** * @return string */ @@ -226,7 +240,7 @@ public function getRouterResponse($autoSerializeContent = true) } return $this->router->getResponse( - $content, $this->getConfiguredHeaderstatusCode(), $this->getConfiguredHeaders() + $content, $this->getConfiguredHeaderstatusCode(), $this->getConfiguredHeaders(), $this->file ); } diff --git a/src/Router/RouterInterface.php b/src/Router/RouterInterface.php index 6fe6511..37d45bf 100644 --- a/src/Router/RouterInterface.php +++ b/src/Router/RouterInterface.php @@ -3,6 +3,7 @@ namespace RREST\Router; use RREST\Response; +use Symfony\Component\HttpFoundation\File\File; interface RouterInterface { @@ -55,8 +56,9 @@ public function setPayloadBodyValue($payloadBodyJSON); * @param string $content * @param int $statusCode * @param string[] $headers + * @param string|File|\SplFileInfo|null $file * * @return mixed */ - public function getResponse($content = '', $statusCode = 200, $headers = array()); + public function getResponse($content = '', $statusCode = 200, $headers = array(), $file = null); } diff --git a/src/Router/Silex.php b/src/Router/Silex.php index c71a86a..f4cdeab 100644 --- a/src/Router/Silex.php +++ b/src/Router/Silex.php @@ -2,6 +2,7 @@ namespace RREST\Router; +use Symfony\Component\HttpFoundation\BinaryFileResponse as HttpFoundationBinaryFileResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response as HttpFoundationResponse; use RREST\Response; @@ -111,8 +112,11 @@ public function setPayloadBodyValue($payloadBodyJSON) /** * {@inheritdoc} */ - public function getResponse($content = '', $statusCode = 200, $headers = array()) + public function getResponse($content = '', $statusCode = 200, $headers = array(), $file = null) { + if (!empty($file)) { + return new HttpFoundationBinaryFileResponse($file, $statusCode, $headers); + } return new HttpFoundationResponse($content, $statusCode, $headers); } } diff --git a/tests/units/Response.php b/tests/units/Response.php index 7fec540..7400007 100644 --- a/tests/units/Response.php +++ b/tests/units/Response.php @@ -5,6 +5,7 @@ require_once __DIR__.'/boostrap.php'; use atoum; +use RREST\Response\FileConfiguration; use RREST\Router\Silex; use Silex\Application;