Skip to content

Commit 93fb52f

Browse files
author
Witold Wasiczko
committed
Initial commit
0 parents  commit 93fb52f

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/nbproject/private/

composer.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "php-middleware/request-simulator",
3+
"require": {
4+
"zendframework/zend-diactoros": "1.*"
5+
},
6+
"autoload": {
7+
"psr-4": {
8+
"PhpMiddleware\\RequestSimulator\\": "src/"
9+
}
10+
}
11+
}

src/RequestSimulatorMiddleware.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace PhpMiddleware\RequestSimulator;
4+
5+
use Psr\Http\Message\ResponseInterface;
6+
use Psr\Http\Message\ServerRequestInterface;
7+
use Zend\Diactoros\Request\Serializer as RequestSerializer;
8+
use Zend\Diactoros\Response\HtmlResponse;
9+
use Zend\Diactoros\Response\Serializer as ResponseSerializer;
10+
11+
class RequestSimulatorMiddleware
12+
{
13+
const PARAM = 'simulated-request';
14+
15+
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
16+
{
17+
$parsedBody = $request->getParsedBody();
18+
19+
if ($request->getMethod() === 'POST' && is_array($parsedBody) && isset($parsedBody[self::PARAM])) {
20+
$requestToSimulate = $parsedBody[self::PARAM];
21+
$request = RequestSerializer::fromString($requestToSimulate);
22+
}
23+
24+
$requestAsString = RequestSerializer::toString($request);
25+
26+
$responseResult = $next($request, $response);
27+
28+
$responseAsString = ResponseSerializer::toString($responseResult);
29+
30+
$html = sprintf($this->getHtmlTemplate(), self::PARAM, $requestAsString, $responseAsString);
31+
32+
return new HtmlResponse($html);
33+
}
34+
35+
private function getHtmlTemplate()
36+
{
37+
return '<html>'
38+
. '<body>'
39+
. '<h1>Request simulator</h1>'
40+
. '<form method="post">'
41+
. '<h2>Request</h2>'
42+
. '<textarea name="%s">%s</textarea>'
43+
. '<input type="submit" />'
44+
. '</form>'
45+
. '<h2>Response</h2>'
46+
. '<code>%s</code>'
47+
. '</body>'
48+
. '</html>';
49+
}
50+
}

0 commit comments

Comments
 (0)