Skip to content
This repository was archived by the owner on Feb 6, 2020. It is now read-only.

Commit 93a8e11

Browse files
committed
Added more array checking and slimlined argument retrieval (thanks @Ocramius)
1 parent 1618071 commit 93a8e11

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

src/AbstractFactory/ConfigAbstractFactory.php

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@ public function canCreate(\Interop\Container\ContainerInterface $container, $req
2727
$config = $container->get('config');
2828
$dependencies = $config[self::class];
2929

30-
return array_key_exists($requestedName, $dependencies);
30+
return is_array($dependencies) && array_key_exists($requestedName, $dependencies) && is_array(
31+
$dependencies[$requestedName]
32+
);
3133
}
3234

3335
/**
@@ -37,16 +39,7 @@ public function __invoke(\Interop\Container\ContainerInterface $container, $requ
3739
{
3840
$config = $container->get('config');
3941
$dependencies = $config[self::class][$requestedName];
40-
41-
// class has no dependencies, just create it and return
42-
if (empty($dependencies)) {
43-
return new $requestedName();
44-
}
45-
46-
$arguments = [];
47-
foreach ($dependencies as $dependency) {
48-
$arguments[] = $container->get($dependency);
49-
}
42+
$arguments = array_map([$container, 'get'], $dependencies);
5043

5144
return new $requestedName(...$arguments);
5245
}

test/AbstractFactory/ConfigAbstractFactoryTest.php

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,31 @@
2121
class ConfigAbstractFactoryTest extends \PHPUnit_Framework_TestCase
2222
{
2323

24-
public function testCanCreateShortCircuits()
24+
public function testCanCreateReturnsFalseIfDependencyNotArrays()
2525
{
2626
$abstractFactory = new ConfigAbstractFactory();
2727
$serviceManager = new ServiceManager();
28+
$serviceManager->setService(
29+
'config',
30+
[
31+
ConfigAbstractFactory::class => 'Blancmange',
32+
]
33+
);
34+
35+
self::assertFalse($abstractFactory->canCreate($serviceManager, InvokableObject::class));
36+
37+
$serviceManager->setAllowOverride(true);g
38+
$serviceManager->setService(
39+
'config',
40+
[
41+
ConfigAbstractFactory::class => [
42+
InvokableObject::class => 42,
43+
]
44+
]
45+
);
46+
47+
self::assertFalse($abstractFactory->canCreate($serviceManager, InvokableObject::class));
2848

29-
self::assertFalse($abstractFactory->canCreate($serviceManager, 'OcramiusSucks'));
3049
}
3150

3251
public function testCanCreate()

0 commit comments

Comments
 (0)