Skip to content

Commit 1e6deaa

Browse files
committed
Support request body, POST parameters
1 parent 73c60ba commit 1e6deaa

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

src/Igorw/CgiHttpKernel/CgiHttpKernel.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Symfony\Component\HttpFoundation\Request;
66
use Symfony\Component\HttpFoundation\Response;
7+
use Symfony\Component\HttpFoundation\ParameterBag;
78
use Symfony\Component\HttpKernel\HttpKernelInterface;
89
use Symfony\Component\Process\ProcessBuilder;
910

@@ -26,18 +27,22 @@ public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQ
2627
return new Response('The requested file could not be found.', 404);
2728
}
2829

30+
$requestBody = $request->getContent() ?: $this->getRequestBodyFromParameterBag($request->request);
31+
2932
$process = ProcessBuilder::create()
3033
->add('php-cgi')
3134
->add('-d expose_php=Off')
3235
->add('-d cgi.force_redirect=Off')
3336
->add($filename)
34-
->setInput($request->getContent())
37+
->setInput($requestBody)
3538
->setEnv('SCRIPT_FILENAME', $filename)
3639
->setEnv('SCRIPT_NAME', $this->rootDir.'/'.$filename)
3740
->setEnv('PATH_INFO', $request->getPathInfo())
3841
->setEnv('QUERY_STRING', $request->getQueryString())
3942
->setEnv('REQUEST_URI', $request->getRequestUri())
4043
->setEnv('REQUEST_METHOD', $request->getMethod())
44+
->setEnv('CONTENT_LENGTH', strlen($requestBody))
45+
->setEnv('CONTENT_TYPE', $request->headers->get('Content-Type'))
4146
->setWorkingDirectory($this->rootDir)
4247
->getProcess();
4348

@@ -52,7 +57,7 @@ public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQ
5257
return new Response($body, $status, $headers);
5358
}
5459

55-
public function getStatusCode(array $headers)
60+
private function getStatusCode(array $headers)
5661
{
5762
if (isset($headers['Status'])) {
5863
list($code) = explode(' ', $headers['Status']);
@@ -62,7 +67,7 @@ public function getStatusCode(array $headers)
6267
return 200;
6368
}
6469

65-
public function getHeaderMap(array $headerList)
70+
private function getHeaderMap(array $headerList)
6671
{
6772
$headerMap = array();
6873
foreach ($headerList as $item) {
@@ -71,4 +76,9 @@ public function getHeaderMap(array $headerList)
7176
}
7277
return $headerMap;
7378
}
79+
80+
private function getRequestBodyFromParameterBag(ParameterBag $bag)
81+
{
82+
return http_build_query($bag->all());
83+
}
7484
}

tests/Igorw/CgiHttpKernel/CgiHttpKernelTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,13 @@ public function frontControllerShouldSupportDelete()
9595

9696
$this->assertSame('deleted', $response->getContent());
9797
}
98+
99+
/** @test */
100+
public function itShouldForwardRequestBody()
101+
{
102+
$request = Request::create('/post-body.php', 'POST', array('foo' => 'bar'));
103+
$response = $this->kernel->handle($request);
104+
105+
$this->assertSame('bar', $response->getContent());
106+
}
98107
}

0 commit comments

Comments
 (0)