Merge branch '4.3' into 4.4
* 4.3: [DI] fix locators with numeric keys Fix error when we use VO for the marking property
This commit is contained in:
commit
f459fd01a2
@ -52,6 +52,8 @@ final class ServiceLocatorTagPass extends AbstractRecursivePass
|
|||||||
throw new InvalidArgumentException(sprintf('Invalid definition for service "%s": an array of references is expected as first argument when the "container.service_locator" tag is set.', $this->currentId));
|
throw new InvalidArgumentException(sprintf('Invalid definition for service "%s": an array of references is expected as first argument when the "container.service_locator" tag is set.', $this->currentId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
|
||||||
foreach ($arguments[0] as $k => $v) {
|
foreach ($arguments[0] as $k => $v) {
|
||||||
if ($v instanceof ServiceClosureArgument) {
|
if ($v instanceof ServiceClosureArgument) {
|
||||||
continue;
|
continue;
|
||||||
@ -60,10 +62,13 @@ final class ServiceLocatorTagPass extends AbstractRecursivePass
|
|||||||
throw new InvalidArgumentException(sprintf('Invalid definition for service "%s": an array of references is expected as first argument when the "container.service_locator" tag is set, "%s" found for key "%s".', $this->currentId, \is_object($v) ? \get_class($v) : \gettype($v), $k));
|
throw new InvalidArgumentException(sprintf('Invalid definition for service "%s": an array of references is expected as first argument when the "container.service_locator" tag is set, "%s" found for key "%s".', $this->currentId, \is_object($v) ? \get_class($v) : \gettype($v), $k));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\is_int($k)) {
|
if ($i === $k) {
|
||||||
unset($arguments[0][$k]);
|
unset($arguments[0][$k]);
|
||||||
|
|
||||||
$k = (string) $v;
|
$k = (string) $v;
|
||||||
|
++$i;
|
||||||
|
} elseif (\is_int($k)) {
|
||||||
|
$i = null;
|
||||||
}
|
}
|
||||||
$arguments[0][$k] = new ServiceClosureArgument($v);
|
$arguments[0][$k] = new ServiceClosureArgument($v);
|
||||||
}
|
}
|
||||||
|
@ -114,6 +114,7 @@ class ServiceLocatorTagPassTest extends TestCase
|
|||||||
->setArguments([[
|
->setArguments([[
|
||||||
'bar' => new Reference('baz'),
|
'bar' => new Reference('baz'),
|
||||||
new Reference('bar'),
|
new Reference('bar'),
|
||||||
|
16 => new Reference('baz'),
|
||||||
]])
|
]])
|
||||||
->addTag('container.service_locator')
|
->addTag('container.service_locator')
|
||||||
;
|
;
|
||||||
@ -124,6 +125,7 @@ class ServiceLocatorTagPassTest extends TestCase
|
|||||||
$locator = $container->get('foo');
|
$locator = $container->get('foo');
|
||||||
|
|
||||||
$this->assertSame(TestDefinition1::class, \get_class($locator('bar')));
|
$this->assertSame(TestDefinition1::class, \get_class($locator('bar')));
|
||||||
|
$this->assertSame(TestDefinition2::class, \get_class($locator(16)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testBindingsAreCopied()
|
public function testBindingsAreCopied()
|
||||||
|
@ -61,7 +61,7 @@ final class MethodMarkingStore implements MarkingStoreInterface
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($this->singleState) {
|
if ($this->singleState) {
|
||||||
$marking = [$marking => 1];
|
$marking = [(string) $marking => 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Marking($marking);
|
return new Marking($marking);
|
||||||
|
@ -52,4 +52,35 @@ class MethodMarkingStoreTest extends TestCase
|
|||||||
|
|
||||||
$this->assertEquals($marking, $marking2);
|
$this->assertEquals($marking, $marking2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetMarkingWithValueObject()
|
||||||
|
{
|
||||||
|
$subject = new Subject($this->createValueObject('first_place'));
|
||||||
|
|
||||||
|
$markingStore = new MethodMarkingStore(true);
|
||||||
|
|
||||||
|
$marking = $markingStore->getMarking($subject);
|
||||||
|
|
||||||
|
$this->assertInstanceOf(Marking::class, $marking);
|
||||||
|
$this->assertCount(1, $marking->getPlaces());
|
||||||
|
$this->assertSame('first_place', (string) $subject->getMarking());
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createValueObject(string $markingValue)
|
||||||
|
{
|
||||||
|
return new class($markingValue) {
|
||||||
|
/** @var string */
|
||||||
|
private $markingValue;
|
||||||
|
|
||||||
|
public function __construct(string $markingValue)
|
||||||
|
{
|
||||||
|
$this->markingValue = $markingValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
return $this->markingValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user