Skip to content

Commit 2a04b39

Browse files
[DI] Turn services and aliases private by default, with BC layer
1 parent c4159b1 commit 2a04b39

File tree

76 files changed

+248
-111
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+248
-111
lines changed

src/Symfony/Bridge/ProxyManager/Tests/LazyProxy/Dumper/PhpDumperTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private function dumpLazyServiceProjectServiceContainer()
6161
{
6262
$container = new ContainerBuilder();
6363

64-
$container->register('foo', 'stdClass');
64+
$container->register('foo', 'stdClass')->setPublic(true);
6565
$container->getDefinition('foo')->setLazy(true);
6666
$container->compile();
6767

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -1012,12 +1012,12 @@ private function registerTemplatingConfiguration(array $config, ContainerBuilder
10121012

10131013
// Use a delegation unless only a single engine was registered
10141014
if (1 === count($engines)) {
1015-
$container->setAlias('templating', (string) reset($engines));
1015+
$container->setAlias('templating', (string) reset($engines))->setPublic(true);
10161016
} else {
10171017
foreach ($engines as $engine) {
10181018
$container->getDefinition('templating.engine.delegating')->addMethodCall('addEngine', array($engine));
10191019
}
1020-
$container->setAlias('templating', 'templating.engine.delegating');
1020+
$container->setAlias('templating', 'templating.engine.delegating')->setPublic(true);
10211021
}
10221022

10231023
$container->getDefinition('fragment.renderer.hinclude')
@@ -1213,7 +1213,7 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder
12131213
$container->getDefinition('translation.writer')->setPrivate(true);
12141214

12151215
// Use the "real" translator instead of the identity default
1216-
$container->setAlias('translator', 'translator.default');
1216+
$container->setAlias('translator', 'translator.default')->setPublic(true);
12171217
$container->setAlias('translator.formatter', new Alias($config['formatter'], false));
12181218
$translator = $container->findDefinition('translator.default');
12191219
$translator->addMethodCall('setFallbackLocales', array($config['fallbacks']));

src/Symfony/Bundle/FrameworkBundle/Kernel/MicroKernelTrait.php

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public function registerContainerConfiguration(LoaderInterface $loader)
7272
if ($this instanceof EventSubscriberInterface) {
7373
$container->register('kernel', static::class)
7474
->setSynthetic(true)
75+
->setPublic(true)
7576
->addTag('kernel.event_subscriber')
7677
;
7778
}

src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/AutowiringTypes/config.yml

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ imports:
22
- { resource: ../config/default.yml }
33

44
services:
5+
_defaults: { public: true }
56
test.autowiring_types.autowired_services:
67
class: Symfony\Bundle\FrameworkBundle\Tests\Functional\Bundle\TestBundle\AutowiringTypes\AutowiredServices
78
autowire: true

src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/ContainerDebug/config.yml

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ imports:
22
- { resource: ../config/default.yml }
33

44
services:
5+
_defaults: { public: true }
56
public:
67
class: Symfony\Bundle\FrameworkBundle\Tests\Fixtures\DeclaredClass
78
private_alias:

src/Symfony/Bundle/FrameworkBundle/Tests/Functional/app/Serializer/config.yml

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ imports:
22
- { resource: ../config/default.yml }
33

44
services:
5+
_defaults: { public: true }
56
test.property_info: '@property_info'
67

78
framework:

src/Symfony/Bundle/FrameworkBundle/Tests/Kernel/ConcreteMicroKernel.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ protected function configureContainer(ContainerBuilder $c, LoaderInterface $load
8282
));
8383

8484
$c->setParameter('halloween', 'Have a great day!');
85-
$c->register('halloween', 'stdClass');
85+
$c->register('halloween', 'stdClass')->setPublic(true);
8686
}
8787

8888
/**

src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ private function configureDbalAclProvider(array $config, ContainerBuilder $conta
185185
$container->getAlias('security.acl.provider')->setPrivate(true);
186186

187187
if (null !== $config['connection']) {
188-
$container->setAlias('security.acl.dbal.connection', sprintf('doctrine.dbal.%s_connection', $config['connection']));
188+
$container->setAlias('security.acl.dbal.connection', sprintf('doctrine.dbal.%s_connection', $config['connection']))->setPrivate(true);
189189
}
190190

191191
$container

src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/Acl/config.yml

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ imports:
22
- { resource: ./../config/framework.yml }
33

44
services:
5+
_defaults: { public: true }
56
test.security.acl.provider: '@security.acl.provider'
67

78
doctrine:

src/Symfony/Bundle/SecurityBundle/Tests/Functional/app/AutowiringTypes/config.yml

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ imports:
22
- { resource: ../config/framework.yml }
33

44
services:
5+
_defaults: { public: true }
56
test.autowiring_types.autowired_services:
67
class: Symfony\Bundle\SecurityBundle\Tests\Functional\Bundle\AutowiringBundle\AutowiredServices
78
autowire: true

src/Symfony/Component/Console/DependencyInjection/AddConsoleCommandPass.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ public function process(ContainerBuilder $container)
6565
if (isset($serviceIds[$commandId]) || $container->hasAlias($commandId)) {
6666
$commandId = $commandId.'_'.$id;
6767
}
68-
if (!$definition->isPublic()) {
69-
$container->setAlias($commandId, $id);
68+
if (!$definition->isPublic() || $definition->isPrivate()) {
69+
$container->setAlias($commandId, $id)->setPublic(true);
7070
$id = $commandId;
7171
}
7272
$serviceIds[$commandId] = $id;
@@ -97,6 +97,7 @@ public function process(ContainerBuilder $container)
9797

9898
$container
9999
->register($this->commandLoaderServiceId, ContainerCommandLoader::class)
100+
->setPublic(true)
100101
->setArguments(array(ServiceLocatorTagPass::register($container, $lazyCommandRefs), $lazyCommandMap));
101102

102103
$container->setParameter('console.command.ids', $serviceIds);

src/Symfony/Component/Console/composer.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"require-dev": {
2424
"symfony/config": "~3.3|~4.0",
2525
"symfony/event-dispatcher": "~2.8|~3.0|~4.0",
26-
"symfony/dependency-injection": "~3.3|~4.0",
26+
"symfony/dependency-injection": "~3.4|~4.0",
2727
"symfony/lock": "~3.4|~4.0",
2828
"symfony/process": "~3.3|~4.0",
2929
"psr/log": "~1.0"
@@ -35,7 +35,7 @@
3535
"psr/log": "For using the console logger"
3636
},
3737
"conflict": {
38-
"symfony/dependency-injection": "<3.3",
38+
"symfony/dependency-injection": "<3.4",
3939
"symfony/process": "<3.3"
4040
},
4141
"autoload": {

src/Symfony/Component/DependencyInjection/Alias.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class Alias
1515
{
1616
private $id;
1717
private $public;
18-
private $private = false;
18+
private $private;
1919

2020
/**
2121
* @param string $id Alias identifier
@@ -25,6 +25,7 @@ public function __construct($id, $public = true)
2525
{
2626
$this->id = (string) $id;
2727
$this->public = $public;
28+
$this->private = 2 > func_num_args();
2829
}
2930

3031
/**
@@ -47,6 +48,7 @@ public function isPublic()
4748
public function setPublic($boolean)
4849
{
4950
$this->public = (bool) $boolean;
51+
$this->private = false;
5052

5153
return $this;
5254
}

src/Symfony/Component/DependencyInjection/Compiler/AutoAliasServicePass.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function process(ContainerBuilder $container)
3333

3434
$aliasId = $container->getParameterBag()->resolveValue($tag['format']);
3535
if ($container->hasDefinition($aliasId) || $container->hasAlias($aliasId)) {
36-
$container->setAlias($serviceId, new Alias($aliasId));
36+
$container->setAlias($serviceId, new Alias($aliasId, true));
3737
}
3838
}
3939
}

src/Symfony/Component/DependencyInjection/Compiler/CheckDefinitionValidityPass.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public function process(ContainerBuilder $container)
3939
{
4040
foreach ($container->getDefinitions() as $id => $definition) {
4141
// synthetic service is public
42-
if ($definition->isSynthetic() && (!$definition->isPublic() || $definition->isPrivate())) {
42+
if ($definition->isSynthetic() && !($definition->isPublic() || $definition->isPrivate())) {
4343
throw new RuntimeException(sprintf('A synthetic service ("%s") must be public.', $id));
4444
}
4545

src/Symfony/Component/DependencyInjection/Compiler/DecoratorServicePass.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public function process(ContainerBuilder $container)
6767
$container->setDefinition($renamedId, $decoratedDefinition);
6868
}
6969

70-
$container->setAlias($inner, $id)->setPublic($public && !$private)->setPrivate($private);
70+
$container->setAlias($inner, $id)->setPublic($public)->setPrivate($private);
7171
}
7272
}
7373
}

src/Symfony/Component/DependencyInjection/Compiler/RegisterEnvVarProcessorsPass.php

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public function process(ContainerBuilder $container)
5252
$bag->setProvidedTypes($types);
5353
}
5454
$container->register('container.env_var_processors_locator', ServiceLocator::class)
55+
->setPublic(true)
5556
->setArguments(array($processors))
5657
;
5758
}

src/Symfony/Component/DependencyInjection/Compiler/ReplaceAliasByActualDefinitionPass.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function process(ContainerBuilder $container)
4545
}
4646
// Check if target needs to be replaces
4747
if (isset($replacements[$targetId])) {
48-
$container->setAlias($definitionId, $replacements[$targetId]);
48+
$container->setAlias($definitionId, $replacements[$targetId])->setPublic($target->isPublic())->setPrivate($target->isPrivate());
4949
}
5050
// No need to process the same target twice
5151
if (isset($seenAliasTargets[$targetId])) {

src/Symfony/Component/DependencyInjection/Compiler/ResolveChildDefinitionsPass.php

+2
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,14 @@ public function process(ContainerBuilder $container)
3636
foreach ($container->getDefinitions() as $definition) {
3737
if ($definition->isPrivate()) {
3838
$definition->setPublic(false);
39+
$definition->setPrivate(true);
3940
}
4041
}
4142

4243
foreach ($container->getAliases() as $alias) {
4344
if ($alias->isPrivate()) {
4445
$alias->setPublic(false);
46+
$alias->setPrivate(true);
4547
}
4648
}
4749
}

src/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\DependencyInjection\Compiler;
1313

14+
use Symfony\Component\DependencyInjection\Alias;
1415
use Symfony\Component\DependencyInjection\ContainerBuilder;
1516
use Symfony\Component\DependencyInjection\Definition;
1617
use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException;

src/Symfony/Component/DependencyInjection/Compiler/ResolveReferencesToAliasesPass.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public function process(ContainerBuilder $container)
3232
foreach ($container->getAliases() as $id => $alias) {
3333
$aliasId = (string) $alias;
3434
if ($aliasId !== $defId = $this->getDefinitionId($aliasId, $container)) {
35-
$container->setAlias($id, $defId)->setPublic($alias->isPublic() && !$alias->isPrivate())->setPrivate($alias->isPrivate());
35+
$container->setAlias($id, $defId)->setPublic($alias->isPublic())->setPrivate($alias->isPrivate());
3636
}
3737
}
3838
}

src/Symfony/Component/DependencyInjection/Definition.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class Definition
3535
private $configurator;
3636
private $tags = array();
3737
private $public = true;
38-
private $private = false;
38+
private $private = true;
3939
private $synthetic = false;
4040
private $abstract = false;
4141
private $lazy = false;
@@ -603,6 +603,7 @@ public function setPublic($boolean)
603603
$this->changes['public'] = true;
604604

605605
$this->public = (bool) $boolean;
606+
$this->private = false;
606607

607608
return $this;
608609
}

src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ private function addService($definition, $id, \DOMElement $parent)
122122
if (!$definition->isShared()) {
123123
$service->setAttribute('shared', 'false');
124124
}
125-
if (!$definition->isPublic()) {
126-
$service->setAttribute('public', 'false');
125+
if (!$definition->isPrivate()) {
126+
$service->setAttribute('public', $definition->isPublic() ? 'true' : 'false');
127127
}
128128
if ($definition->isSynthetic()) {
129129
$service->setAttribute('synthetic', 'true');
@@ -242,8 +242,8 @@ private function addServiceAlias($alias, Alias $id, \DOMElement $parent)
242242
$service = $this->document->createElement('service');
243243
$service->setAttribute('id', $alias);
244244
$service->setAttribute('alias', $id);
245-
if (!$id->isPublic()) {
246-
$service->setAttribute('public', 'false');
245+
if (!$id->isPrivate()) {
246+
$service->setAttribute('public', $id->isPublic() ? 'true' : 'false');
247247
}
248248
$parent->appendChild($service);
249249
}

src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@ private function addService($id, $definition)
7474
$code .= sprintf(" class: %s\n", $this->dumper->dump($class));
7575
}
7676

77-
if (!$definition->isPublic()) {
78-
$code .= " public: false\n";
77+
if (!$definition->isPrivate()) {
78+
$code .= sprintf(" public: %s\n", $definition->isPublic() ? 'true' : 'false');
7979
}
8080

8181
$tagsCode = '';
@@ -178,11 +178,11 @@ private function addService($id, $definition)
178178
*/
179179
private function addServiceAlias($alias, $id)
180180
{
181-
if ($id->isPublic()) {
181+
if ($id->isPrivate()) {
182182
return sprintf(" %s: '@%s'\n", $alias, $id);
183183
}
184184

185-
return sprintf(" %s:\n alias: %s\n public: false\n", $alias, $id);
185+
return sprintf(" %s:\n alias: %s\n public: %s\n", $alias, $id, $id->isPublic() ? 'true' : 'false');
186186
}
187187

188188
/**

src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php

+3-4
Original file line numberDiff line numberDiff line change
@@ -203,13 +203,12 @@ private function parseDefinition(\DOMElement $service, $file, array $defaults)
203203
if ($alias = $service->getAttribute('alias')) {
204204
$this->validateAlias($service, $file);
205205

206-
$public = true;
206+
$this->container->setAlias((string) $service->getAttribute('id'), $alias = new Alias($alias));
207207
if ($publicAttr = $service->getAttribute('public')) {
208-
$public = XmlUtils::phpize($publicAttr);
208+
$alias->setPublic(XmlUtils::phpize($publicAttr));
209209
} elseif (isset($defaults['public'])) {
210-
$public = $defaults['public'];
210+
$alias->setPublic($defaults['public']);
211211
}
212-
$this->container->setAlias((string) $service->getAttribute('id'), new Alias($alias, $public));
213212

214213
return;
215214
}

src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php

+10-4
Original file line numberDiff line numberDiff line change
@@ -336,8 +336,10 @@ private function parseDefinition($id, $service, $file, array $defaults)
336336
@trigger_error(sprintf('Service names that start with an underscore are deprecated since Symfony 3.3 and will be reserved in 4.0. Rename the "%s" service or define it in XML instead.', $id), E_USER_DEPRECATED);
337337
}
338338
if (is_string($service) && 0 === strpos($service, '@')) {
339-
$public = isset($defaults['public']) ? $defaults['public'] : true;
340-
$this->container->setAlias($id, new Alias(substr($service, 1), $public));
339+
$this->container->setAlias($id, $alias = new Alias(substr($service, 1)));
340+
if (isset($defaults['public'])) {
341+
$alias->setPublic($defaults['public']);
342+
}
341343

342344
return;
343345
}
@@ -357,8 +359,12 @@ private function parseDefinition($id, $service, $file, array $defaults)
357359
$this->checkDefinition($id, $service, $file);
358360

359361
if (isset($service['alias'])) {
360-
$public = array_key_exists('public', $service) ? (bool) $service['public'] : (isset($defaults['public']) ? $defaults['public'] : true);
361-
$this->container->setAlias($id, new Alias($service['alias'], $public));
362+
$this->container->setAlias($id, $alias = new Alias($service['alias']));
363+
if (array_key_exists('public', $service)) {
364+
$alias->setPublic($service['public']);
365+
} elseif (isset($defaults['public'])) {
366+
$alias->setPublic($defaults['public']);
367+
}
362368

363369
foreach ($service as $key => $value) {
364370
if (!in_array($key, array('alias', 'public'))) {

src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveChildDefinitionsPassTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -402,13 +402,13 @@ public function testPrivateHasHigherPrecedenceThanPublic()
402402
$container = new ContainerBuilder();
403403

404404
$container->register('foo', 'stdClass')
405-
->setPrivate(true)
406405
->setPublic(true)
406+
->setPrivate(true)
407407
;
408408

409409
$container->setAlias('bar', 'foo')
410-
->setPrivate(false)
411410
->setPublic(false)
411+
->setPrivate(false)
412412
;
413413

414414
$this->process($container);

0 commit comments

Comments
 (0)