8000 bug #36441 [DI] fix loading defaults when using the PHP-DSL (nicolas-… · symfony/symfony@41c93b6 · GitHub
[go: up one dir, main page]

Skip to content

Commit 41c93b6

Browse files
bug #36441 [DI] fix loading defaults when using the PHP-DSL (nicolas-grekas)
This PR was merged into the 3.4 branch. Discussion ---------- [DI] fix loading defaults when using the PHP-DSL | Q | A | ------------- | --- | Branch? | 3.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | - | License | MIT | Doc PR | - Commits ------- 51e0d37 [DI] fix loading defaults when using the PHP-DSL
2 parents 311a944 + 51e0d37 commit 41c93b6

File tree

10 files changed

+19
-19
lines changed

10 files changed

+19
-19
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ public function process(ContainerBuilder $container)
4444

4545
$recorder = new Definition(is_subclass_of($definition->getClass(), TagAwareAdapterInterface::class) ? TraceableTagAwareAdapter::class : TraceableAdapter::class);
4646
$recorder->setTags($definition->getTags());
47-
$recorder->setPublic($definition->isPublic());
47+
if (!$definition->isPublic() || !$definition->isPrivate()) {
48+
$recorder->setPublic($definition->isPublic());
49+
}
4850
$recorder->setArguments([new Reference($innerId = $id.'.recorder_inner')]);
4951

5052
$definition->setTags([]);

src/Symfony/Component/DependencyInjection/Loader/Configurator/PrototypeConfigurator.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,13 @@ class PrototypeConfigurator extends AbstractServiceConfigurator
4545
public function __construct(ServicesConfigurator $parent, PhpFileLoader $loader, Definition $defaults, $namespace, $resource, $allowParent)
4646
{
4747
$definition = new Definition();
48-
$definition->setPublic($defaults->isPublic());
48+
if (!$defaults->isPublic() || !$defaults->isPrivate()) {
49+
$definition->setPublic($defaults->isPublic());
50+
}
4951
$definition->setAutowired($defaults->isAutowired());
5052
$definition->setAutoconfigured($defaults->isAutoconfigured());
51-
$definition->setBindings($defaults->getBindings());
53+
// deep clone, to avoid multiple process of the same instance in the passes
54+
$definition->setBindings(unserialize(serialize($defaults->getBindings())));
5255
$definition->setChanges([]);
5356

5457
$this->loader = $loader;

src/Symfony/Component/DependencyInjection/Loader/Configurator/ServicesConfigurator.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,13 @@ final public function set($id, $class = null)
7979
$allowParent = !$defaults->getChanges() && empty($this->instanceof);
8080

8181
$definition = new Definition();
82-
$definition->setPublic($defaults->isPublic());
82+
if (!$defaults->isPublic() || !$defaults->isPrivate()) {
83+
$definition->setPublic($defaults->isPublic() && !$defaults->isPrivate());
84+
}
8385
$definition->setAutowired($defaults->isAutowired());
8486
$definition->setAutoconfigured($defaults->isAutoconfigured());
85-
$definition->setBindings($defaults->getBindings());
87+
// deep clone, to avoid multiple process of the same instance in the passes
88+
$definition->setBindings(unserialize(serialize($defaults->getBindings())));
8689
$definition->setChanges([]);
8790

8891
$configurator = new ServiceConfigurator($this->container, $this->instanceof, $allowParent, $this, $definition, $id, $defaults->getTags());
@@ -101,7 +104,10 @@ final public function set($id, $class = null)
101104
final public function alias($id, $referencedId)
102105
{
103106
$ref = static::processValue($referencedId, true);
104-
$alias = new Alias((string) $ref, $this->defaults->isPublic());
107+
$alias = new Alias((string) $ref);
108+
if (!$this->defaults->isPublic() || !$this->defaults->isPrivate()) {
109+
$alias->setPublic($this->defaults->isPublic());
110+
}
105111
$this->container->setAlias($id, $alias);
106112

107113
return new AliasConfigurator($this, $alias);

src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/basic.expected.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,4 @@ services:
66
synthetic: true
77
App\BarService:
88
class: App\BarService
9-
public: true
109
arguments: [!service { class: FooClass }]

src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/child.expected.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@ services:
66
synthetic: true
77
foo:
88
class: Class2
9-
public: true
109
file: file.php
1110
lazy: true
1211
arguments: [!service { class: Class1, public: false }]
13-
bar:
14-
alias: foo
15-
public: true
12+
bar: '@foo'

src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/defaults.expected.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ services:
66
synthetic: true
77
App\BarService:
88
class: App\BarService
9-
public: true
109
arguments: [!service { class: FooClass }]
1110
Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo:
1211
class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo

src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/instanceof.expected.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ services:
66
synthetic: true
77
Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo:
88
class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo
9-
public: true
109
tags:
1110
- { name: tag, k: v }
1211
lazy: true
@@ -18,4 +17,3 @@ services:
1817
configurator: c
1918
foo:
2019
class: App\FooService
21-
public: true

src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/php7.expected.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ services:
1313
arguments: ['@bar']
1414
bar:
1515
class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo
16-
public: true
1716
calls:
1817
- [setFoo, { }]
1918

src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/prototype.expected.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ services:
66
synthetic: true
77
Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo:
88
class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo
9-
public: true
109
tags:
1110
- { name: foo }
1211
- { name: baz }
@@ -15,7 +14,6 @@ services:
1514
factory: f
1615
Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\Bar:
1716
class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\Bar
18-
public: true
1917
tags:
2018
- { name: foo }
2119
- { name: baz }

src/Symfony/Component/DependencyInjection/Tests/Fixtures/config/services9.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
$p->set('foo_class', FooClass::class)
1515
->set('foo', 'bar');
1616

17-
$s = $c->services();
17+
$s = $c->services()->defaults()->public();
1818
$s->set('foo')
1919
->args(['foo', ref('foo.baz'), ['%foo%' => 'foo is %foo%', 'foobar' => '%foo%'], true, ref('service_container')])
2020
->class(FooClass::class)
@@ -120,7 +120,6 @@
120120
->tag('foo');
121121

122122
$s->set('tagged_iterator', 'Bar')
123-
->public()
124123
->args([tagged('foo')]);
125124

126125
$s->alias('alias_for_foo', 'foo')->private()->public();

0 commit comments

Comments
 (0)
0