Skip to content

Commit e4f04fa

Browse files
[DI] Turn services and aliases private by default, with BC layer
1 parent db554b9 commit e4f04fa

Some content is hidden

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

64 files changed

+231
-101
lines changed

Alias.php

Lines changed: 3 additions & 1 deletion
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
}

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ CHANGELOG
44
3.4.0
55
-----
66

7+
* deprecated "public-by-default" definitions and aliases, the new default will be "private" in 4.0
78
* added `EnvVarProcessorInterface` and corresponding "container.env_var_processor" tag for processing env vars
89
* added support for ignore-on-uninitialized references
910
* deprecated service auto-registration while autowiring

Compiler/AutoAliasServicePass.php

Lines changed: 1 addition & 1 deletion
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
}

Compiler/CheckDefinitionValidityPass.php

Lines changed: 1 addition & 1 deletion
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

Compiler/DecoratorServicePass.php

Lines changed: 1 addition & 1 deletion
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
}

Compiler/RegisterEnvVarProcessorsPass.php

Lines changed: 1 addition & 0 deletions
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
}

Compiler/ReplaceAliasByActualDefinitionPass.php

Lines changed: 1 addition & 1 deletion
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])) {

Compiler/ResolveChildDefinitionsPass.php

Lines changed: 2 additions & 0 deletions
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
}

Compiler/ResolveReferencesToAliasesPass.php

Lines changed: 1 addition & 1 deletion
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
}

Definition.php

Lines changed: 2 additions & 1 deletion
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
}

Dumper/XmlDumper.php

Lines changed: 4 additions & 4 deletions
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
}

Dumper/YamlDumper.php

Lines changed: 4 additions & 4 deletions
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
/**

Loader/XmlFileLoader.php

Lines changed: 3 additions & 4 deletions
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
}

Loader/YamlFileLoader.php

Lines changed: 10 additions & 4 deletions
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'))) {

Tests/Compiler/ResolveChildDefinitionsPassTest.php

Lines changed: 2 additions & 2 deletions
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)