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