Skip to content

Commit 9fe1460

Browse files
Merge branch '3.4' into 4.4
* 3.4: [DI] fix loading defaults when using the PHP-DSL RepeatedType should always have inner types mapped
2 parents c3b8496 + d10ff55 commit 9fe1460

15 files changed

+31
-23
lines changed

Loader/Configurator/AbstractServiceConfigurator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public function __destruct()
4242
/**
4343
* Registers a service.
4444
*/
45-
final public function set(string $id, string $class = null): ServiceConfigurator
45+
final public function set(?string $id, string $class = null): ServiceConfigurator
4646
{
4747
$this->__destruct();
4848

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, string $namespace, string $resource, bool $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;

Loader/Configurator/ServicesConfigurator.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,14 @@ final public function set(?string $id, string $class = null): ServiceConfigurato
8383

8484
$id = sprintf('.%d_%s', ++$this->anonymousCount, preg_replace('/^.*\\\\/', '', $class).'~'.$this->anonymousHash);
8585
$definition->setPublic(false);
86-
} else {
87-
$definition->setPublic($defaults->isPublic());
86+
} elseif (!$defaults->isPublic() || !$defaults->isPrivate()) {
87+
$definition->setPublic($defaults->isPublic() && !$defaults->isPrivate());
8888
}
8989

9090
$definition->setAutowired($defaults->isAutowired());
9191
$definition->setAutoconfigured($defaults->isAutoconfigured());
92-
$definition->setBindings($defaults->getBindings());
92+
// deep clone, to avoid multiple process of the same instance in the passes
93+
$definition->setBindings(unserialize(serialize($defaults->getBindings())));
9394
$definition->setChanges([]);
9495

9596
$configurator = new ServiceConfigurator($this->container, $this->instanceof, $allowParent, $this, $definition, $id, $defaults->getTags(), $this->path);
@@ -103,7 +104,10 @@ final public function set(?string $id, string $class = null): ServiceConfigurato
103104
final public function alias(string $id, string $referencedId): AliasConfigurator
104105
{
105106
$ref = static::processValue($referencedId, true);
106-
$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+
}
107111
$this->container->setAlias($id, $alias);
108112

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

Tests/Fixtures/config/anonymous.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use Symfony\Component\DependencyInjection\Tests\Fixtures\StdClassDecorator;
88

99
return function (ContainerConfigurator $c) {
10-
$s = $c->services();
10+
$s = $c->services()->defaults()->public();
1111

1212
$s->set('decorated', stdClass::class);
1313

Tests/Fixtures/config/basic.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
use App\BarService;
66

77
return function (ContainerConfigurator $c) {
8-
$s = $c->services();
8+
$s = $c->services()->defaults()->public();
99
$s->set(BarService::class)
1010
->args([inline('FooClass')]);
1111
};

Tests/Fixtures/config/child.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66

77
return function (ContainerConfigurator $c) {
88
$c->services()
9-
->set('bar', 'Class1')
9+
->set('bar', 'Class1')->public()
1010
->set(BarService::class)
11+
->public()
1112
->abstract(true)
1213
->lazy()
1314
->set('foo')
1415
->parent(BarService::class)
16+
->public()
1517
->decorate('bar', 'b', 1)
1618
->args([ref('b')])
1719
->class('Class2')

Tests/Fixtures/config/defaults.expected.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ services:
1818
arguments: ['@bar']
1919
bar:
2020
class: Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Foo
21-
public: false
21+
public: true
2222
tags:
2323
- { name: t, a: b }
2424
autowire: true

Tests/Fixtures/config/defaults.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
->autowire()
1515
->tag('t', ['a' => 'b'])
1616
->bind(Foo::class, ref('bar'))
17-
->private();
17+
->public();
1818

1919
$s->set(Foo::class)->args([ref('bar')])->public();
2020
$s->set('bar', Foo::class)->call('setFoo')->autoconfigure(false);

Tests/Fixtures/config/instanceof.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype;
77

88
return function (ContainerConfigurator $c) {
9-
$s = $c->services();
9+
$s = $c->services()->defaults()->public();
1010
$s->instanceof(Prototype\Foo::class)
1111
->property('p', 0)
1212
->call('setFoo', [ref('foo')])

Tests/Fixtures/config/lazy_fqcn.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
44

55
return function (ContainerConfigurator $c) {
6-
$di = $c->services();
6+
$di = $c->services()->defaults()->public();
77
$di->set('foo', 'stdClass')->lazy('SomeInterface');
88
};

0 commit comments

Comments
 (0)