8000 Make all services public that we are retrieving directly from the con… · contao/core-bundle@d6df8a8 · GitHub
[go: up one dir, main page]

Skip to content

Commit d6df8a8

Browse files
committed
Make all services public that we are retrieving directly from the container.
1 parent 483e7fe commit d6df8a8

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

src/DependencyInjection/Compiler/MakeServicesPublicPass.php

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1616
use Symfony\Component\DependencyInjection\ContainerBuilder;
17+
use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException;
1718

1819
/**
1920
* Makes services public that we need to retrieve directly.
@@ -25,8 +26,27 @@ class MakeServicesPublicPass implements CompilerPassInterface
2526
*/
2627
public function process(ContainerBuilder $container): void
2728
{
28-
if ($container->hasDefinition('security.firewall.map')) {
29-
8000 $container->getDefinition('security.firewall.map')->setPublic(true);
29+
$services = [
30+
'assets.packages',
31+
'database_connection',
32+
'doctrine.dbal.default_connection',
33+
'fragment.handler',
34+
'lexik_maintenance.driver.factory',
35+
'monolog.logger.contao',
36+
'security.firewall.map',
37+
'security.logout_url_generator',
38+
'swiftmailer.mailer'
39+
];
40+
41+
foreach ($services as $service) {
42+
// Uses findDefinition instead of hasDefinition/getDefinition
43+
// as hasDefinition does not check aliased services
44+
try {
45+
$definition = $container->findDefinition($service);
46+
$definition->setPublic(true);
47+
} catch (ServiceNotFoundException $exception) {
48+
continue;
49+
}
3050
}
3151
}
32-
}
52+
}

tests/DependencyInjection/Compiler/MakeServicesPublicPassTest.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,23 @@ public function testCanBeInstantiated(): void
2929
public function testMakesTheServicesPublic(): void
3030
{
3131
$container = new ContainerBuilder();
32-
$container->setDefinition('security.firewall.map', new Definition());
32+
$container->setDefinition('security.firewall.map', (new Definition())->setPublic(false));
3333

3434
$pass = new MakeServicesPublicPass();
3535
$pass->process($container);
3636

3737
$this->assertTrue($container->getDefinition('security.firewall.map')->isPublic());
3838
}
39+
40+
public function testMakesAliasedServicesPublic(): void
41+
{
42+
$container = new ContainerBuilder();
43+
$container->setDefinition('contao.fragment.handler', (new Definition())->setPublic(false));
44+
$container->setAlias('fragment.handler', 'contao.fragment.handler');
45+
46+
$pass = new MakeServicesPublicPass();
47+
$pass->process($container);
48+
49+
$this->assertTrue($container->getDefinition('contao.fragment.handler')->isPublic());
50+
}
3951
}

0 commit comments

Comments
 (0)
0