|
3 | 3 | namespace PhpMiddleware\PhpDebugBar;
|
4 | 4 |
|
5 | 5 | use DebugBar\JavascriptRenderer as DebugBarRenderer;
|
| 6 | +use Interop\Http\ServerMiddleware\DelegateInterface; |
| 7 | +use Interop\Http\ServerMiddleware\MiddlewareInterface; |
| 8 | +use PhpMiddleware\DoublePassCompatibilityTrait; |
6 | 9 | use Psr\Http\Message\MessageInterface;
|
7 | 10 | use Psr\Http\Message\ResponseInterface;
|
8 | 11 | use Psr\Http\Message\ServerRequestInterface;
|
|
18 | 21 | *
|
19 | 22 | * @author Witold Wasiczko <[email protected]>
|
20 | 23 | */
|
21 |
| -class PhpDebugBarMiddleware |
| 24 | +class PhpDebugBarMiddleware implements MiddlewareInterface |
22 | 25 | {
|
23 |
| - /** |
24 |
| - * @var DebugBarRenderer |
25 |
| - */ |
| 26 | + use DoublePassCompatibilityTrait; |
| 27 | + |
26 | 28 | protected $debugBarRenderer;
|
27 | 29 |
|
28 |
| - /** |
29 |
| - * @param DebugBarRenderer $debugbarRenderer |
30 |
| - */ |
31 | 30 | public function __construct(DebugBarRenderer $debugbarRenderer)
|
32 | 31 | {
|
33 | 32 | $this->debugBarRenderer = $debugbarRenderer;
|
34 | 33 | }
|
35 | 34 |
|
36 | 35 | /**
|
37 |
| - * @param ServerRequestInterface $request |
38 |
| - * @param ResponseInterface $response |
39 |
| - * @param callable $next |
40 |
| - * |
41 |
| - * @return ResponseInterface |
| 36 | + * @inheritDoc |
42 | 37 | */
|
43 |
| - public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next) |
| 38 | + public function process(ServerRequestInterface $request, DelegateInterface $delegate) |
44 | 39 | {
|
45 | 40 | if ($staticFile = $this->getStaticFile($request->getUri())) {
|
46 | 41 | return $staticFile;
|
47 | 42 | }
|
48 | 43 |
|
49 |
| - $outResponse = $next($request, $response); |
| 44 | + $response = $delegate->process($request); |
50 | 45 |
|
51 | 46 | if (!$this->isHtmlAccepted($request)) {
|
52 |
| - return $outResponse; |
| 47 | + return $response; |
53 | 48 | }
|
54 | 49 |
|
55 |
| - $debugBarHead = $this->debugBarRenderer->renderHead(); |
56 |
| - $debugBarBody = $this->debugBarRenderer->render(); |
57 |
| - |
58 |
| - if ($this->isHtmlResponse($outResponse)) { |
59 |
| - $body = $outResponse->getBody(); |
60 |
| - if (! $body->eof() && $body->isSeekable()) { |
61 |
| - $body->seek(0, SEEK_END); |
62 |
| - } |
63 |
| - $body->write($debugBarHead . $debugBarBody); |
64 |
| - |
65 |
| - return $outResponse; |
| 50 | + if ($this->isHtmlResponse($response)) { |
| 51 | + return $this->attachDebugBarToResponse($response); |
66 | 52 | }
|
| 53 | + return $this->prepareHtmlResponseWithDebugBar($response); |
| 54 | + } |
67 | 55 |
|
68 |
| - $outResponseBody = Serializer::toString($outResponse); |
| 56 | + /** |
| 57 | + * @return HtmlResponse |
| 58 | + */ |
| 59 | + private function prepareHtmlResponseWithDebugBar(ResponseInterface $response) |
| 60 | + { |
| 61 | + $head = $this->debugBarRenderer->renderHead(); |
| 62 | + $body = $this->debugBarRenderer->render(); |
| 63 | + $outResponseBody = Serializer::toString($response); |
69 | 64 | $template = '<html><head>%s</head><body><h1>DebugBar</h1><p>Response:</p><pre>%s</pre>%s</body></html>';
|
70 | 65 | $escapedOutResponseBody = htmlspecialchars($outResponseBody);
|
71 |
| - $result = sprintf($template, $debugBarHead, $escapedOutResponseBody, $debugBarBody); |
| 66 | + $result = sprintf($template, $head, $escapedOutResponseBody, $body); |
72 | 67 |
|
73 | 68 | return new HtmlResponse($result);
|
74 | 69 | }
|
75 | 70 |
|
76 | 71 | /**
|
77 |
| - * @param UriInterface $uri |
78 |
| - * |
| 72 | + * @return ResponseInterface |
| 73 | + */ |
| 74 | + private function attachDebugBarToResponse(ResponseInterface $response) |
| 75 | + { |
| 76 | + $head = $this->debugBarRenderer->renderHead(); |
| 77 | + $body = $this->debugBarRenderer->render(); |
| 78 | + $responseBody = $response->getBody(); |
| 79 | + |
| 80 | + if (! $responseBody->eof() && $responseBody->isSeekable()) { |
| 81 | + $responseBody->seek(0, SEEK_END); |
| 82 | + } |
| 83 | + $responseBody->write($head . $body); |
| 84 | + |
| 85 | + return $response; |
| 86 | + } |
| 87 | + |
| 88 | + /** |
79 | 89 | * @return ResponseInterface|null
|
80 | 90 | */
|
81 | 91 | private function getStaticFile(UriInterface $uri)
|
@@ -139,11 +149,7 @@ private function getContentTypeByFileName($filename)
|
139 | 149 | 'woff2' => 'application/font-woff2',
|
140 | 150 | ];
|
141 | 151 |
|
142 |
| - if (isset($map[$ext])) { |
143 |
| - return $map[$ext]; |
144 |
| - } |
145 |
| - |
146 |
| - return 'text/plain'; |
| 152 | + return isset($map[$ext]) ? $map[$ext] : 'text/plain'; |
147 | 153 | }
|
148 | 154 |
|
149 | 155 | /**
|
|
0 commit comments