|
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