Skip to content

Commit 5321e34

Browse files
[8.x] Allow method typed variadics dependencies (#40255)
* [8.x] Allow method typed variadics dependencies * check array Co-authored-by: Taylor Otwell <[email protected]>
1 parent 066cbdf commit 5321e34

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/Illuminate/Container/BoundMethod.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,15 @@ protected static function addDependencyForCallParameter($container, $parameter,
172172

173173
unset($parameters[$className]);
174174
} else {
175-
$dependencies[] = $container->make($className);
175+
if ($parameter->isVariadic()) {
176+
$variadicDependencies = $container->make($className);
177+
178+
$dependencies = array_merge($dependencies, is_array($variadicDependencies)
179+
? $variadicDependencies
180+
: [$variadicDependencies]);
181+
} else {
182+
$dependencies[] = $container->make($className);
183+
}
176184
}
177185
} elseif ($parameter->isDefaultValueAvailable()) {
178186
$dependencies[] = $parameter->getDefaultValue();

tests/Container/ContainerCallTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,29 @@ public function testCallWithDependencies()
160160
$this->assertSame('taylor', $result[1]);
161161
}
162162

163+
public function testCallWithVariadicDependency()
164+
{
165+
$stub1 = new ContainerCallConcreteStub;
166+
$stub2 = new ContainerCallConcreteStub;
167+
168+
$container = new Container;
169+
$container->bind(ContainerCallConcreteStub::class, function () use ($stub1, $stub2) {
170+
return [
171+
$stub1,
172+
$stub2,
173+
];
174+
});
175+
176+
$result = $container->call(function (stdClass $foo, ContainerCallConcreteStub ...$bar) {
177+
return func_get_args();
178+
});
179+
180+
$this->assertInstanceOf(stdClass::class, $result[0]);
181+
$this->assertInstanceOf(ContainerCallConcreteStub::class, $result[1]);
182+
$this->assertSame($stub1, $result[1]);
183+
$this->assertSame($stub2, $result[2]);
184+
}
185+
163186
public function testCallWithCallableObject()
164187
{
165188
$container = new Container;

0 commit comments

Comments
 (0)