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

Commit ec011db

Browse files
committed
Incorporate feedback for InputFilterAbstractServiceFactory
- Move v2 checks into v2-specific methods of abstract factory. - Use provided `$services` argument when lazy-instantiating filter and validator plugin managers. - For abstract factory tests, vary methods tested based on service manager version.
1 parent 656001c commit ec011db

File tree

2 files changed

+89
-40
lines changed

2 files changed

+89
-40
lines changed

src/InputFilterAbstractServiceFactory.php

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
use Zend\Filter\FilterPluginManager;
1414
use Zend\ServiceManager\AbstractFactoryInterface;
1515
use Zend\ServiceManager\ServiceLocatorInterface;
16-
use Zend\ServiceManager\ServiceManager;
1716
use Zend\Validator\ValidatorPluginManager;
1817

1918
class InputFilterAbstractServiceFactory implements AbstractFactoryInterface
@@ -23,7 +22,6 @@ class InputFilterAbstractServiceFactory implements AbstractFactoryInterface
2322
*/
2423
protected $factory;
2524

26-
2725
/**
2826
* @param ContainerInterface $services
2927
* @param string $rName
@@ -32,14 +30,8 @@ class InputFilterAbstractServiceFactory implements AbstractFactoryInterface
3230
*/
3331
public function __invoke(ContainerInterface $services, $rName, array $options = null)
3432
{
35-
// v2 - get parent service manager
36-
if (! method_exists($services, 'configure')) {
37-
$services = $services->getServiceLocator();
38-
}
39-
4033
$allConfig = $services->get('config');
4134
$config = $allConfig['input_filter_specs'][$rName];
42-
4335
$factory = $this->getInputFilterFactory($services);
4436

4537
return $factory->createInputFilter($config);
@@ -54,11 +46,6 @@ public function __invoke(ContainerInterface $services, $rName, array $options =
5446
*/
5547
public function canCreate(ContainerInterface $services, $rName)
5648
{
57-
// v2 - get parent service manager
58-
if (! method_exists($services, 'configure')) {
59-
$services = $services->getServiceLocator();
60-
}
61-
6249
if (! $services->has('config')) {
6350
return false;
6451
}
@@ -83,7 +70,15 @@ public function canCreate(ContainerInterface $services, $rName)
8370
*/
8471
public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
8572
{
86-
return $this->canCreate($serviceLocator, $requestedName);
73+
// v2 => need to get parent service locator
74+
$services = $serviceLocator->getServiceLocator();
75+
76+
// No parent locator => cannot create service.
77+
if (! $services) {
78+
return false;
79+
}
80+
81+
return $this->canCreate($services, $requestedName);
8782
}
8883

8984
/**
@@ -94,7 +89,15 @@ public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator
9489
*/
9590
public function createServiceWithName(ServiceLocatorInterface $inputFilters, $cName, $rName)
9691
{
97-
return $this($inputFilters, $rName);
92+
// v2 => need to get parent service locator
93+
$services = $inputFilters->getServiceLocator();
94+
95+
// No parent locator => cannot create service.
96+
if (! $services) {
97+
return false;
98+
}
99+
100+
return $this($services, $rName);
98101
}
99102

100103
/**
@@ -128,7 +131,7 @@ protected function getFilterPluginManager(ServiceLocatorInterface $services)
128131
return $services->get('FilterManager');
129132
}
130133

131-
return new FilterPluginManager(new ServiceManager());
134+
return new FilterPluginManager($services);
132135
}
133136

134137
/**
@@ -141,6 +144,6 @@ protected function getValidatorPluginManager(ServiceLocatorInterface $services)
141144
return $services->get('ValidatorManager');
142145
}
143146

144-
return new ValidatorPluginManager(new ServiceManager());
147+
return new ValidatorPluginManager($services);
145148
}
146149
}

test/InputFilterAbstractServiceFactoryTest.php

Lines changed: 69 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,19 @@
2424
*/
2525
class InputFilterAbstractServiceFactoryTest extends TestCase
2626
{
27-
/** @var ServiceManager */
27+
/**
28+
* @var ServiceManager
29+
*/
2830
protected $services;
2931

30-
/** @var InputFilterPluginManager */
32+
/**
33+
* @var InputFilterPluginManager
34+
*/
3135
protected $filters;
3236

33-
/** @var InputFilterAbstractServiceFactory */
37+
/**
38+
* @var InputFilterAbstractServiceFactory
39+
*/
3440
protected $factory;
3541

3642
public function setUp()
@@ -44,27 +50,48 @@ public function setUp()
4450

4551
public function testCannotCreateServiceIfNoConfigServicePresent()
4652
{
47-
$this->assertFalse($this->factory->canCreate($this->getCompatContainer(), 'filter'));
48-
// v2
49-
$this->assertFalse($this->factory->canCreateServiceWithName($this->getCompatContainer(), 'filter', 'filter'));
53+
if (method_exists($this->services, 'configure')) {
54+
// v3
55+
$method = 'canCreate';
56+
$args = [$this->getCompatContainer(), 'filter'];
57+
} else {
58+
// v2
59+
$method = 'canCreateServiceWithName';
60+
$args = [$this->getCompatContainer(), 'filter', 'filter'];
61+
}
62+
$this->assertFalse(call_user_func_array([$this->factory, $method], $args));
5063
}
5164

5265
public function testCannotCreateServiceIfConfigServiceDoesNotHaveInputFiltersConfiguration()
5366
{
5467
$this->services->setService('config', []);
55-
$this->assertFalse($this->factory->canCreate($this->getCompatContainer(), 'filter'));
56-
// v2
57-
$this->assertFalse($this->factory->canCreateServiceWithName($this->getCompatContainer(), 'filter', 'filter'));
68+
if (method_exists($this->services, 'configure')) {
69+
// v3
70+
$method = 'canCreate';
71+
$args = [$this->getCompatContainer(), 'filter'];
72+
} else {
73+
// v2
74+
$method = 'canCreateServiceWithName';
75+
$args = [$this->getCompatContainer(), 'filter', 'filter'];
76+
}
77+
$this->assertFalse(call_user_func_array([$this->factory, $method], $args));
5878
}
5979

6080
public function testCannotCreateServiceIfConfigInputFiltersDoesNotContainMatchingServiceName()
6181
{
6282
$this->services->setService('config', [
6383
'input_filter_specs' => [],
6484
]);
65-
$this->assertFalse($this->factory->canCreate($this->getCompatContainer(), 'filter'));
66-
// v2
67-
$this->assertFalse($this->factory->canCreateServiceWithName($this->getCompatContainer(), 'filter', 'filter'));
85+
if (method_exists($this->services, 'configure')) {
86+
// v3
87+
$method = 'canCreate';
88+
$args = [$this->getCompatContainer(), 'filter'];
89+
} else {
90+
// v2
91+
$method = 'canCreateServiceWithName';
92+
$args = [$this->getCompatContainer(), 'filter', 'filter'];
93+
}
94+
$this->assertFalse(call_user_func_array([$this->factory, $method], $args));
6895
}
6996

7097
public function testCanCreateServiceIfConfigInputFiltersContainsMatchingServiceName()
@@ -74,9 +101,16 @@ public function testCanCreateServiceIfConfigInputFiltersContainsMatchingServiceN
74101
'filter' => [],
75102
],
76103
]);
77-
$this->assertTrue($this->factory->canCreate($this->getCompatContainer(), 'filter'));
78-
// v2
79-
$this->assertTrue($this->factory->canCreateServiceWithName($this->getCompatContainer(), 'filter', 'filter'));
104+
if (method_exists($this->services, 'configure')) {
105+
// v3
106+
$method = 'canCreate';
107+
$args = [$this->getCompatContainer(), 'filter'];
108+
} else {
109+
// v2
110+
$method = 'canCreateServiceWithName';
111+
$args = [$this->getCompatContainer(), 'filter', 'filter'];
112+
}
113+
$this->assertTrue(call_user_func_array([$this->factory, $method], $args));
80114
}
81115

82116
public function testCreatesInputFilterInstance()
@@ -86,11 +120,17 @@ public function testCreatesInputFilterInstance()
86120
'filter' => [],
87121
],
88122
]);
89-
$filter = $this->factory->__invoke($this->getCompatContainer(), 'filter');
123+
if (method_exists($this->services, 'configure')) {
124+
// v3
125+
$method = '__invoke';
126+
$args = [$this->getCompatContainer(), 'filter'];
127+
} else {
128+
// v2
129+
$method = 'createServiceWithName';
130+
$args = [$this->getCompatContainer(), 'filter', 'filter'];
131+
}
132+
$filter = call_user_func_array([$this->factory, $method], $args);
90133
$this->assertInstanceOf(InputFilterInterface::class, $filter);
91-
// v2
92-
$v2filter = $this->factory->createServiceWithName($this->getCompatContainer(), 'filter', 'filter');
93-
$this->assertEquals($filter, $v2filter);
94134
}
95135

96136
/**
@@ -128,11 +168,17 @@ public function testUsesConfiguredValidationAndFilterManagerServicesWhenCreating
128168
]);
129169

130170

131-
$inputFilter = $this->factory->__invoke($this->getCompatContainer(), 'filter');
171+
if (method_exists($this->services, 'configure')) {
172+
// v3
173+
$method = '__invoke';
174+
$args = [$this->getCompatContainer(), 'filter'];
175+
} else {
176+
// v2
177+
$method = 'createServiceWithName';
178+
$args = [$this->getCompatContainer(), 'filter', 'filter'];
179+
}
180+
$inputFilter = call_user_func_array([$this->factory, $method], $args);
132181
$this->assertTrue($inputFilter->has('input'));
133-
// v2
134-
$v2InputFilter = $this->factory->createServiceWithName($this->getCompatContainer(), 'filter', 'filter');
135-
$this->assertEquals($inputFilter, $v2InputFilter);
136182

137183
$input = $inputFilter->get('input');
138184

0 commit comments

Comments
 (0)