DiactorosFactory.php in Zircon Profile 8.0
File
vendor/symfony/psr-http-message-bridge/Factory/DiactorosFactory.php
View source
<?php
namespace Symfony\Bridge\PsrHttpMessage\Factory;
use Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Zend\Diactoros\Response as DiactorosResponse;
use Zend\Diactoros\ServerRequest;
use Zend\Diactoros\ServerRequestFactory as DiactorosRequestFactory;
use Zend\Diactoros\Stream as DiactorosStream;
use Zend\Diactoros\UploadedFile as DiactorosUploadedFile;
class DiactorosFactory implements HttpMessageFactoryInterface {
public function __construct() {
if (!class_exists('Zend\\Diactoros\\ServerRequestFactory')) {
throw new \RuntimeException('Zend Diactoros must be installed to use the DiactorosFactory.');
}
}
public function createRequest(Request $symfonyRequest) {
$server = DiactorosRequestFactory::normalizeServer($symfonyRequest->server
->all());
$headers = $symfonyRequest->headers
->all();
try {
$body = new DiactorosStream($symfonyRequest
->getContent(true));
} catch (\LogicException $e) {
$body = new DiactorosStream('php://temp', 'wb+');
$body
->write($symfonyRequest
->getContent());
}
$request = new ServerRequest($server, DiactorosRequestFactory::normalizeFiles($this
->getFiles($symfonyRequest->files
->all())), $symfonyRequest
->getUri(), $symfonyRequest
->getMethod(), $body, $headers);
$request = $request
->withCookieParams($symfonyRequest->cookies
->all())
->withQueryParams($symfonyRequest->query
->all())
->withParsedBody($symfonyRequest->request
->all());
foreach ($symfonyRequest->attributes
->all() as $key => $value) {
$request = $request
->withAttribute($key, $value);
}
return $request;
}
private function getFiles(array $uploadedFiles) {
$files = array();
foreach ($uploadedFiles as $key => $value) {
if ($value instanceof UploadedFile) {
$files[$key] = $this
->createUploadedFile($value);
}
else {
$files[$key] = $this
->getFiles($value);
}
}
return $files;
}
private function createUploadedFile(UploadedFile $symfonyUploadedFile) {
return new DiactorosUploadedFile($symfonyUploadedFile
->getRealPath(), $symfonyUploadedFile
->getSize(), $symfonyUploadedFile
->getError(), $symfonyUploadedFile
->getClientOriginalName(), $symfonyUploadedFile
->getClientMimeType());
}
public function createResponse(Response $symfonyResponse) {
if ($symfonyResponse instanceof BinaryFileResponse) {
$stream = new DiactorosStream($symfonyResponse
->getFile()
->getPathname(), 'r');
}
else {
$stream = new DiactorosStream('php://temp', 'wb+');
if ($symfonyResponse instanceof StreamedResponse) {
ob_start(function ($buffer) use ($stream) {
$stream
->write($buffer);
return false;
});
$symfonyResponse
->sendContent();
ob_end_clean();
}
else {
$stream
->write($symfonyResponse
->getContent());
}
}
$headers = $symfonyResponse->headers
->all();
$cookies = $symfonyResponse->headers
->getCookies();
if (!empty($cookies)) {
$headers['Set-Cookie'] = array();
foreach ($cookies as $cookie) {
$headers['Set-Cookie'][] = $cookie
->__toString();
}
}
$response = new DiactorosResponse($stream, $symfonyResponse
->getStatusCode(), $headers);
$protocolVersion = $symfonyResponse
->getProtocolVersion();
if ('1.1' !== $protocolVersion) {
$response = $response
->withProtocolVersion($protocolVersion);
}
return $response;
}
}
Classes
Name |
Description |
DiactorosFactory |
Builds Psr\HttpMessage instances using the Zend Diactoros implementation. |