Skip to content

Commit 3533bcf

Browse files
Merge pull request #1 from PHPFastCGI/upgrade-to-2-7
Upgraded kernel wrapper to handle PSR messages
2 parents 4a80ade + a9495ec commit 3533bcf

File tree

7 files changed

+432
-882
lines changed

7 files changed

+432
-882
lines changed

.travis.yml

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
language: php
22

33
php:
4-
- 5.4
54
- 5.5
65
- 5.6
76
- hhvm

Bridge/KernelWrapper.php

+21-31
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
namespace PHPFastCGI\SpeedfonyBundle\Bridge;
44

55
use PHPFastCGI\FastCGIDaemon\KernelInterface;
6-
use PHPFastCGI\FastCGIDaemon\Http\RequestEnvironmentInterface;
7-
use Symfony\Component\HttpFoundation\Request;
6+
use Psr\Http\Message\ServerRequestInterface;
7+
use Symfony\Bridge\PsrHttpMessage\HttpFoundationFactoryInterface;
8+
use Symfony\Bridge\PsrHttpMessage\HttpMessageFactoryInterface;
89
use Symfony\Component\HttpKernel\Kernel;
910

1011
class KernelWrapper implements KernelInterface
@@ -14,48 +15,37 @@ class KernelWrapper implements KernelInterface
1415
*/
1516
protected $kernel;
1617

18+
/**
19+
* @var HttpFoundationFactoryInterface
20+
*/
21+
protected $symfonyMessageFactory;
22+
23+
/**
24+
* @var HttpMessageFactoryInterface
25+
*/
26+
protected $psrMessageFactory;
27+
1728
/**
1829
* Constructor.
1930
*
2031
* @param Kernel $kernel
2132
*/
22-
public function __construct(Kernel $kernel)
33+
public function __construct(Kernel $kernel, HttpFoundationFactoryInterface $symfonyMessageFactory, HttpMessageFactoryInterface $psrMessageFactory)
2334
{
24-
$this->kernel = $kernel;
35+
$this->kernel = $kernel;
36+
$this->symfonyMessageFactory = $symfonyMessageFactory;
37+
$this->psrMessageFactory = $psrMessageFactory;
2538
}
2639

2740
/**
2841
* {@inheritdoc}
2942
*/
30-
public function handleRequest(RequestEnvironmentInterface $requestEnvironment)
43+
public function handleRequest(ServerRequestInterface $request)
3144
{
32-
$server = $requestEnvironment->getServer();
33-
$query = $requestEnvironment->getQuery();
34-
$post = $requestEnvironment->getPost();
35-
$files = $requestEnvironment->getFiles();
36-
$cookies = $requestEnvironment->getCookies();
37-
$content = null;
38-
39-
$body = $requestEnvironment->getBody();
40-
41-
if (null !== $body) {
42-
$content = stream_get_contents($body);
43-
}
44-
45-
$request = new Request($query, $post, [], $cookies, $files, $server, $content);
46-
47-
$response = $this->kernel->handle($request);
48-
49-
$statusCode = $response->getStatusCode();
50-
51-
if (isset($response::$statusTexts[$statusCode])) {
52-
$reasonPhrase = $response::$statusTexts[$statusCode];
53-
} else {
54-
$reasonPhrase = '';
55-
}
45+
$symfonyRequest = $this->symfonyMessageFactory->createRequest($request);;
5646

57-
$headers = explode("\r\n", trim((string) $response->headers));
47+
$symfonyResponse = $this->kernel->handle($symfonyRequest);
5848

59-
return new Response($statusCode, $reasonPhrase, $headers, $response->getContent());
49+
return $this->psrMessageFactory->createResponse($symfonyResponse);
6050
}
6151
}

Bridge/Response.php

-68
This file was deleted.

Resources/config/services.yml

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
services:
2+
php_fast_cgi_speedfony.symfony_message_factory:
3+
class: Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory
4+
5+
php_fast_cgi_speedfony.psr_message_factory:
6+
class: Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory
7+
28
php_fast_cgi_speedfony.daemon_run_command:
39
class: PHPFastCGI\SpeedfonyBundle\Command\DaemonRunCommand
4-
arguments: [@kernel]
10+
arguments: ['@kernel', '@php_fast_cgi_speedfony.symfony_message_factory', '@php_fast_cgi_speedfony.psr_message_factory']
511
tags:
612
- { name: console.command }

Tests/Bridge/KernelWrapperTest.php

+27-54
Original file line numberDiff line numberDiff line change
@@ -2,74 +2,47 @@
22

33
namespace PHPFastCGI\SpeedfonyBundle\Tests\Bridge;
44

5-
use PHPFastCGI\FastCGIDaemon\Http\RequestEnvironmentBuilder;
65
use PHPFastCGI\SpeedfonyBundle\Bridge\KernelWrapper;
6+
use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory;
7+
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
78
use Symfony\Component\HttpFoundation\Request;
89
use Symfony\Component\HttpFoundation\Response;
10+
use Zend\Diactoros\ServerRequestFactory;
911

1012
class KernelWrapperTest extends \PHPUnit_Framework_TestCase
1113
{
12-
/**
13-
* @var string[]
14-
*/
15-
protected $params;
16-
17-
/**
18-
* @var string
19-
*/
20-
protected $content;
21-
2214
public function testKernelWrapper()
2315
{
24-
// Build response
25-
$response = new Response('Hello World', 200);
16+
$globals = array(
17+
'server' => array(
18+
'REQUEST_URI' => '/uri'
19+
),
20+
'query' => array(
21+
'foo' => 'bar'
22+
),
23+
'post' => array(
24+
'bar' => 'foo'
25+
)
26+
);
2627

27-
// Mock kernel and get wrapper
28-
$kernelMock = new MockKernel(function (Request $request) use ($response) {
29-
foreach ($this->params as $name => $value) {
30-
$this->assertEquals($request->server->get(strtoupper($name)), $value);
31-
}
28+
$psrRequest = ServerRequestFactory::fromGlobals($globals['server'], $globals['query'], $globals['post']);
29+
$symfonyResponse = new Response('Hello World');
3230

33-
$this->assertEquals($request->query->all(), ['bar' => 'foo', 'world' => 'hello' ]);
34-
$this->assertEquals($request->request->all(), ['foo' => 'bar', 'hello' => 'world' ]);
35-
$this->assertEquals($request->cookies->all(), ['one' => 'two', 'three' => 'four', 'five' => 'six' ]);
31+
$kernel = new MockKernel(function (Request $symfonyRequest) use ($globals, $symfonyResponse) {
32+
$this->assertEquals($globals['server'], $symfonyRequest->server->all());
33+
$this->assertEquals($globals['query'], $symfonyRequest->query->all());
34+
$this->assertEquals($globals['post'], $symfonyRequest->request->all());
3635

37-
return $response;
36+
$this->assertEquals($globals['server']['REQUEST_URI'], $symfonyRequest->getRequestUri());
37+
38+
return $symfonyResponse;
3839
});
3940

40-
$kernelWrapper = new KernelWrapper($kernelMock);
41-
42-
// Build request
43-
$builder = new RequestEnvironmentBuilder();
44-
45-
$this->params = [
46-
'SERVER_PROTOCOL' => 'HTTP/1.1',
47-
'REQUEST_METHOD' => 'POST',
48-
'content_type' => 'application/x-www-form-urlencoded',
49-
'REQUEST_URI' => '/my-page',
50-
'QUERY_STRING' => 'bar=foo&world=hello',
51-
'HTTP_cookie' => 'one=two; three=four; five=six',
52-
];
53-
54-
$this->content = 'foo=bar&hello=world';
41+
$kernelWrapper = new KernelWrapper($kernel, new HttpFoundationFactory(), new DiactorosFactory());
5542

56-
foreach ($this->params as $name => $value) {
57-
$builder->addParam($name, $value);
58-
}
59-
60-
$builder->addStdin($this->content);
61-
62-
$requestEnvironment = $builder->getRequestEnvironment();
63-
64-
// Hand to callback
65-
$returnedResponse = $kernelWrapper->handleRequest($requestEnvironment);
66-
67-
$returnedOutput = (
68-
'HTTP/' . $response->getProtocolVersion() . ' ' . $returnedResponse->getStatusCode() . ' ' . $returnedResponse->getReasonPhrase() . "\r\n" .
69-
implode("\r\n", $returnedResponse->getHeaderLines()) . "\r\n\r\n" .
70-
$returnedResponse->getBody()
71-
);
43+
$psrResponse = $kernelWrapper->handleRequest($psrRequest);
7244

73-
$this->assertEquals($returnedOutput, (string) $response);
45+
$this->assertEquals($symfonyResponse->getContent(), (string) $psrResponse->getBody());
46+
$this->assertEquals($symfonyResponse->getStatusCode(), $psrResponse->getStatusCode());
7447
}
7548
}

composer.json

+4-7
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,10 @@
1111
}
1212
],
1313
"require": {
14-
"php": ">=5.4.0",
15-
"symfony/dependency-injection": "~2.0",
16-
"symfony/framework-bundle": "~2.0",
17-
"symfony/http-kernel": "~2.0",
18-
"symfony/console": "~2.0",
19-
"symfony/config": "~2.0",
20-
"phpfastcgi/fastcgi-daemon": "0.1.0"
14+
"php": ">=5.5.0",
15+
"symfony/symfony": "~2.7",
16+
"symfony/psr-http-message-bridge": "~0.1",
17+
"phpfastcgi/fastcgi-daemon": "~0.2"
2118
},
2219
"require-dev": {
2320
"satooshi/php-coveralls": "dev-master"

0 commit comments

Comments
 (0)