8000 added checks for public services on compiler passes that use service … · symfony/symfony@0f0fa52 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0f0fa52

Browse files
committed
added checks for public services on compiler passes that use service id and not references
1 parent 418944b commit 0f0fa52

File tree

4 files changed

+24
-3
lines changed

4 files changed

+24
-3
lines changed

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Compiler/AddConstraintValidatorsPass.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,17 @@ public function process(ContainerBuilder $container)
2828
$validators[$attributes[0]['alias']] = $id;
2929
}
3030

31-
$validators[$container->getDefinition($id)->getClass()] = $id;
31+
$definition = $container->getDefinition($id);
32+
33+
if (!$definition->isPublic()) {
34+
throw new InvalidArgumentException(sprintf('The service "%s" must be public as it can be lazy-loaded.', $id));
35+
}
36+
37+
if ($definition->isAbstract()) {
38+
throw new InvalidArgumentException(sprintf('The service "%s" must not be abstract as it can be lazy-loaded.', $id));
39+
}
40+
41+
$validators[$definition->getClass()] = $id;
3242
}
3343

3444
$container->getDefinition('validator.validator_factory')->replaceArgument(1, $validators);

src/Symfony/Bundle/FrameworkBundle/FrameworkBundle.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ public function build(ContainerBuilder $container)
7676
// but as late as possible to get resolved parameters
7777
$container->addCompilerPass(new RegisterListenersPass(), PassConfig::TYPE_BEFORE_REMOVING);
7878
$container->addCompilerPass(new TemplatingPass());
79-
$container->addCompilerPass(new AddConstraintValidatorsPass());
79+
$container->addCompilerPass(new AddConstraintValidatorsPass(), PassConfig::TYPE_BEFORE_REMOVING);
8080
$container->addCompilerPass(new AddValidatorInitializersPass());
8181
$container->addCompilerPass(new AddConsoleCommandPass());
8282
$container->addCompilerPass(new FormPass());

src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/RuntimeLoaderPass.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,17 @@ public function process(ContainerBuilder $container)
2828
$definition = $container->getDefinition('twig.runtime_loader');
2929
$mapping = array();
3030
foreach ($container->findTaggedServiceIds('twig.runtime') as $id => $attributes) {
31-
$mapping[$container->getDefinition($id)->getClass()] = $id;
31+
$def = $container->getDefinition($id);
32+
33+
if (!$def->isPublic()) {
34+
throw new InvalidArgumentException(sprintf('The service "%s" must be public as it can be lazy-loaded.', $id));
35+
}
36+
37+
if ($def->isAbstract()) {
38+
throw new InvalidArgumentException(sprintf('The service "%s" must not be abstract as it can be lazy-loaded.', $id));
39+
}
40+
41+
$mapping[$def->getClass()] = $id;
3242
}
3343

3444
$definition->replaceArgument(1, $mapping);

src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/TwigExtensionTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ public function testRuntimeLoader()
231231

232232
$loader = $container->getDefinition('twig.runtime_loader');
233233
$args = $loader->getArgument(1);
234+
print_r($loader->getArguments());
234235
$this->assertArrayHasKey('Symfony\Bridge\Twig\Form\TwigRenderer', $args);
235236
$this->assertArrayHasKey('FooClass', $args);
236237
$this->assertContains('twig.form.renderer', $args);

0 commit comments

Comments
 (0)
0