Skip to content

Commit 3152450

Browse files
committed
Init
1 parent ce1b799 commit 3152450

File tree

5 files changed

+167
-0
lines changed

5 files changed

+167
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/vendor/
2+
composer.lock

composer.json

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"name": "php-middleware/php-debug-bar",
3+
"description": "PHP Debug bar middleware with PSR-7",
4+
"type": "library",
5+
"keywords": [
6+
"debug",
7+
"middleware",
8+
"psr",
9+
"psr-7"
10+
],
11+
"require": {
12+
"maximebf/debugbar": "^1.10",
13+
"psr/http-message": "^1.0",
14+
"zendframework/zend-diactoros": "^1.1.3"
15+
},
16+
"require-dev": {
17+
"phpunit/phpunit": "^4.8.6"
18+
},
19+
"autoload": {
20+
"psr-4": {
21+
"PhpMiddleware\\PhpDebugBar\\": "src/"
22+
}
23+
},
24+
"autoload-dev": {
25+
"psr-4": {
26+
"PhpMiddlewareTest\\PhpDebugBar\\": "test/"
27+
}
28+
}
29+
}

phpunit.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<phpunit bootstrap="./vendor/autoload.php" colors="true">
4+
<testsuites>
5+
<testsuite name="PhpMiddleware\\PhpDebugBar Tests">
6+
<directory>./test</directory>
7+
</testsuite>
8+
</testsuites>
9+
10+
<filter>
11+
<whitelist processUncoveredFilesFromWhitelist="true">
12+
<directory suffix=".php">./src</directory>
13+
</whitelist>
14+
</filter>
15+
</phpunit>

src/PhpDebugBarMiddleware.php

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?php
2+
3+
namespace PhpMiddleware\PhpDebugBar;
4+
5+
use DebugBar\JavascriptRenderer as DebugBarRenderer;
6+
use Psr\Http\Message\ResponseInterface;
7+
use Psr\Http\Message\ServerRequestInterface;
8+
use Zend\Diactoros\Response\HtmlResponse;
9+
use Zend\Diactoros\Response\Serializer;
10+
11+
/**
12+
* PhpDebugBarMiddleware
13+
*
14+
* @author Witold Wasiczko <witold@wasiczko.pl>
15+
*/
16+
class PhpDebugBarMiddleware
17+
{
18+
/**
19+
* @var DebugBarRenderer
20+
*/
21+
protected $debugBarRenderer;
22+
23+
/**
24+
* @param DebugBarRenderer $debugbarRenderer
25+
*/
26+
public function __construct(DebugBarRenderer $debugbarRenderer)
27+
{
28+
$this->debugBarRenderer = $debugbarRenderer;
29+
}
30+
31+
/**
32+
* @param ServerRequestInterface $request
33+
* @param ResponseInterface $response
34+
* @param callable $out
35+
*
36+
* @return ResponseInterface
37+
*/
38+
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $out = null)
39+
{
40+
$outResponse = $out($request, $response);
41+
42+
if (!$this->isHtmlAccepted($request)) {
43+
return $outResponse;
44+
}
45+
46+
$debugBarHead = $this->debugBarRenderer->renderHead();
47+
$debugBarBody = $this->debugBarRenderer->render();
48+
49+
if ($this->isHtmlResponse($outResponse)) {
50+
$outResponse->getBody()->write($debugBarHead . $debugBarBody);
51+
52+
return $outResponse;
53+
}
54+
55+
$outResponseBody = Serializer::toString($outResponse);
56+
$template = '<html><head>%s</head><body><h1>DebugBar</h1><p>Response:</p><pre>%s</pre>%s</body></html>';
57+
$escapedOutResponseBody = htmlspecialchars($outResponseBody);
58+
$result = sprintf($template, $debugBarHead, $escapedOutResponseBody, $debugBarBody);
59+
60+
return new HtmlResponse($result);
61+
}
62+
63+
/**
64+
* @param ResponseInterface $response
65+
*
66+
* @return bool
67+
*/
68+
private function isHtmlResponse(ResponseInterface $response)
69+
{
70+
return strpos($response->getHeaderLine('Content-Type'), 'text/html') !== false;
71+
}
72+
73+
/**
74+
* @param ServerRequestInterface $request
75+
*
76+
* @return bool
77+
*/
78+
private function isHtmlAccepted(ServerRequestInterface $request)
79+
{
80+
return strpos($request->getHeaderLine('Accept'), 'text/html') !== false;
81+
}
82+
}

test/PhpDebugBarMiddlewareTest.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace PhpMiddlewareTest\PhpDebugBar;
4+
5+
use DebugBar\JavascriptRenderer;
6+
use PhpMiddleware\PhpDebugBar\PhpDebugBarMiddleware;
7+
8+
/**
9+
* PhpDebugBarMiddlewareTest
10+
*
11+
* @author Witold Wasiczko <witold@wasiczko.pl>
12+
*/
13+
class PhpDebugBarMiddlewareTest extends \PHPUnit_Framework_TestCase
14+
{
15+
protected $debugbarRenderer;
16+
protected $middleware;
17+
18+
protected function setUp()
19+
{
20+
$this->debugbarRenderer = $this->getMockBuilder(JavascriptRenderer::class)->disableOriginalConstructor()->getMock();
21+
$this->middleware = new PhpDebugBarMiddleware($this->debugbarRenderer);
22+
}
23+
24+
public function testNotAttachIfNotAccept()
25+
{
26+
$request = new \Zend\Diactoros\ServerRequest([], [], null, null, 'php://input', ['Accept: application/json']);
27+
$response = new \Zend\Diactoros\Response();
28+
$calledOut = false;
29+
$outFunction = function ($request, $response) use (&$calledOut) {
30+
$calledOut = true;
31+
return $response;
32+
};
33+
34+
$result = call_user_func($this->middleware, $request, $response, $outFunction);
35+
36+
$this->assertTrue($calledOut, 'Out is not called');
37+
$this->assertSame($response, $result);
38+
}
39+
}

0 commit comments

Comments
 (0)