Skip to content

Commit b0f0e13

Browse files
authored
Merge pull request #14 from php-middleware/configurable-services
Configurable services
2 parents 1f02a97 + cbcdea1 commit b0f0e13

9 files changed

+135
-14
lines changed

Diff for: composer.json

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"php": "^5.5 || ^7.0",
1313
"maximebf/debugbar": "^1.10",
1414
"psr/http-message": "^1.0",
15+
"container-interop/container-interop": "^1.1",
1516
"zendframework/zend-diactoros": "^1.1.3"
1617
},
1718
"require-dev": {

Diff for: config/dependency.config.php

+1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
return [
44
'factories' => [
55
PhpMiddleware\PhpDebugBar\PhpDebugBarMiddleware::class => PhpMiddleware\PhpDebugBar\PhpDebugBarMiddlewareFactory::class,
6+
DebugBar\DataCollector\ConfigCollector::class => PhpMiddleware\PhpDebugBar\ConfigCollectorFactory::class,
67
],
78
];

Diff for: config/phpdebugbar.config.php

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
return [
4+
'phpmiddleware' => [
5+
'phpdebugbar' => [
6+
'javascript_renderer' => [
7+
'base_url' => '/phpdebugbar',
8+
],
9+
'collectors' => [
10+
DebugBar\DataCollector\ConfigCollector::class,
11+
],
12+
'storage' => null,
13+
],
14+
],
15+
];

Diff for: src/ConfigCollectorFactory.php

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace PhpMiddleware\PhpDebugBar;
4+
5+
use DebugBar\DataCollector\ConfigCollector;
6+
use Interop\Container\ContainerInterface;
7+
8+
final class ConfigCollectorFactory
9+
{
10+
public function __invoke(ContainerInterface $container)
11+
{
12+
$data = $container->get('config');
13+
14+
return new ConfigCollector($data, 'Config');
15+
}
16+
}

Diff for: src/ConfigProvider.php

+5-4
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ public static function getConfig()
1212

1313
public function __invoke()
1414
{
15-
return [
16-
'dependencies' => include __DIR__ . '/../config/dependency.config.php',
17-
'middleware_pipeline' => include __DIR__ . '/../config/zend-expressive.middleware_pipeline.config.php',
18-
];
15+
$config = include __DIR__ . '/../config/phpdebugbar.config.php';
16+
$config['dependencies'] = include __DIR__ . '/../config/dependency.config.php';
17+
$config['middleware_pipeline'] = include __DIR__ . '/../config/zend-expressive.middleware_pipeline.config.php';
18+
19+
return $config;
1920
}
2021
}

Diff for: src/JavascriptRendererFactory.php

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace PhpMiddleware\PhpDebugBar;
4+
5+
use DebugBar\DebugBar;
6+
use DebugBar\JavascriptRenderer;
7+
use Interop\Container\ContainerInterface;
8+
9+
final class JavascriptRendererFactory
10+
{
11+
public function __invoke(ContainerInterface $container = null)
12+
{
13+
if ($container === null || !$container->has(DebugBar::class)) {
14+
$standardDebugBarFactory = new StandardDebugBarFactory();
15+
$debugbar = $standardDebugBarFactory($container);
16+
} else {
17+
$debugbar = $container->get(DebugBar::class);
18+
}
19+
20+
$renderer = new JavascriptRenderer($debugbar);
21+
22+
$config = $container !== null && $container->has('config') ? $container->get('config') : [];
23+
24+
if (isset($config['phpmiddleware']['phpdebugbar']['javascript_renderer'])) {
25+
$rendererOptions = $config['phpmiddleware']['phpdebugbar']['javascript_renderer'];
26+
} else {
27+
$rendererOptions = [
28+
'base_url' => '/phpdebugbar',
29+
];
30+
}
31+
32+
$renderer->setOptions($rendererOptions);
33+
34+
return $renderer;
35+
}
36+
}

Diff for: src/PhpDebugBarMiddlewareFactory.php

+9-10
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,19 @@
22

33
namespace PhpMiddleware\PhpDebugBar;
44

5-
use DebugBar\StandardDebugBar;
5+
use DebugBar\JavascriptRenderer;
6+
use Interop\Container\ContainerInterface;
67

7-
/**
8-
* Default, simple factory for middleware
9-
*
10-
* @author Witold Wasiczko <[email protected]>
11-
*/
128
final class PhpDebugBarMiddlewareFactory
139
{
14-
public function __invoke()
10+
public function __invoke(ContainerInterface $container = null)
1511
{
16-
$debugbar = new StandardDebugBar();
17-
$renderer = $debugbar->getJavascriptRenderer('/phpdebugbar');
18-
12+
if ($container === null || !$container->has(JavascriptRenderer::class)) {
13+
$rendererFactory = new JavascriptRendererFactory();
14+
$renderer = $rendererFactory($container);
15+
} else {
16+
$renderer = $container->get(JavascriptRenderer::class);
17+
}
1918
return new PhpDebugBarMiddleware($renderer);
2019
}
2120
}

Diff for: src/StandardDebugBarFactory.php

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace PhpMiddleware\PhpDebugBar;
4+
5+
use DebugBar\StandardDebugBar;
6+
use Interop\Container\ContainerInterface;
7+
8+
final class StandardDebugBarFactory
9+
{
10+
public function __invoke(ContainerInterface $container = null)
11+
{
12+
$debugBar = new StandardDebugBar();
13+
14+
if ($container !== null) {
15+
$config = $container->has('config') ? $container->get('config') : [];
16+
17+
$collectors = isset($config['phpmiddleware']['phpdebugbar']['collectors']) ? $config['phpmiddleware']['phpdebugbar']['collectors'] : [];
18+
19+
foreach ($collectors as $collectorName) {
20+
$collector = $container->get($collectorName);
21+
$debugBar->addCollector($collector);
22+
}
23+
24+
if (isset($config['phpmiddleware']['phpdebugbar']['storage']) && is_string($config['phpmiddleware']['phpdebugbar']['storage'])) {
25+
$storage = $container->get($config['phpmiddleware']['phpdebugbar']['storage']);
26+
$debugBar->setStorage($config['phpmiddleware']['phpdebugbar']['storage']);
27+
}
28+
}
29+
30+
return $debugBar;
31+
}
32+
}

Diff for: test/ZendExpressiveTest.php

+20
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44

55
use Interop\Container\ContainerInterface;
66
use PhpMiddleware\PhpDebugBar\ConfigProvider;
7+
use Psr\Http\Message\ServerRequestInterface;
78
use Zend\Diactoros\Response\EmitterInterface;
89
use Zend\Diactoros\ServerRequestFactory;
910
use Zend\Expressive\Container\ApplicationFactory;
1011
use Zend\ServiceManager\ServiceManager;
12+
use Zend\Stratigility\Http\ResponseInterface;
1113

1214
final class ZendExpressiveTest extends AbstractMiddlewareRunnerTest
1315
{
@@ -20,6 +22,24 @@ protected function setUp()
2022
$this->testEmitter = new TestEmitter();
2123
}
2224

25+
final public function testContainsConfigCollectorOutput()
26+
{
27+
$response = $this->dispatchApplication([
28+
'REQUEST_URI' => '/hello',
29+
'REQUEST_METHOD' => 'GET',
30+
'HTTP_ACCEPT' => 'text/html',
31+
], [
32+
'/hello' => function (ServerRequestInterface $request, ResponseInterface $response, $next) {
33+
$response->getBody()->write('Hello!');
34+
return $response;
35+
},
36+
]);
37+
38+
$responseBody = (string) $response->getBody();
39+
40+
$this->assertContains('DebugBar\\\DataCollector\\\ConfigCollector', $responseBody);
41+
}
42+
2343
protected function dispatchApplication(array $server, array $pipe = [])
2444
{
2545
$container = $this->createContainer();

0 commit comments

Comments
 (0)