Skip to content

Commit 071abd7

Browse files
[DI][Config] Add & use ReflectionClassResource
1 parent 2929097 commit 071abd7

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

DependencyInjection/FragmentRendererPass.php

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use Symfony\Component\DependencyInjection\ContainerBuilder;
1515
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1616
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
17+
use Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface;
1718

1819
/**
1920
* Adds services tagged kernel.fragment_renderer as HTTP content rendering strategies.
@@ -53,14 +54,12 @@ public function process(ContainerBuilder $container)
5354
}
5455

5556
$class = $container->getParameterBag()->resolveValue($def->getClass());
56-
$interface = 'Symfony\Component\HttpKernel\Fragment\FragmentRendererInterface';
5757

58-
if (!is_subclass_of($class, $interface)) {
59-
if (!class_exists($class, false)) {
60-
throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id));
61-
}
62-
63-
throw new InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, $interface));
58+
if (!$r = $container->getReflectionClass($class)) {
59+
throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id));
60+
}
61+
if (!$r->isSubclassOf(FragmentRendererInterface::class)) {
62+
throw new InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, FragmentRendererInterface::class));
6463
}
6564

6665
foreach ($tags as $tag) {

Tests/DependencyInjection/FragmentRendererPassTest.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public function testValidContentRenderer()
7373
->will($this->returnValue(true))
7474
;
7575

76-
$builder = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition'))->getMock();
76+
$builder = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder')->setMethods(array('hasDefinition', 'findTaggedServiceIds', 'getDefinition', 'getReflectionClass'))->getMock();
7777
$builder->expects($this->any())
7878
->method('hasDefinition')
7979
->will($this->returnValue(true));
@@ -87,6 +87,11 @@ public function testValidContentRenderer()
8787
->method('getDefinition')
8888
->will($this->onConsecutiveCalls($renderer, $definition));
8989

90+
$builder->expects($this->atLeastOnce())
91+
->method('getReflectionClass')
92+
->with('Symfony\Component\HttpKernel\Tests\DependencyInjection\RendererService')
93+
->will($this->returnValue(new \ReflectionClass('Symfony\Component\HttpKernel\Tests\DependencyInjection\RendererService')));
94+
9095
$pass = new FragmentRendererPass();
9196
$pass->process($builder);
9297
}

composer.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"symfony/config": "~2.8|~3.0",
2929
"symfony/console": "~2.8|~3.0",
3030
"symfony/css-selector": "~2.8|~3.0",
31-
"symfony/dependency-injection": "~2.8|~3.0",
31+
"symfony/dependency-injection": "~3.3",
3232
"symfony/dom-crawler": "~2.8|~3.0",
3333
"symfony/expression-language": "~2.8|~3.0",
3434
"symfony/finder": "~2.8|~3.0",
@@ -41,7 +41,8 @@
4141
"psr/cache": "~1.0"
4242
},
4343
"conflict": {
44-
"symfony/config": "<2.8"
44+
"symfony/config": "<2.8",
45+
"symfony/dependency-injection": "<3.3"
4546
},
4647
"suggest": {
4748
"symfony/browser-kit": "",

0 commit comments

Comments
 (0)