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