diff --git a/src/InputFilterAbstractServiceFactory.php b/src/InputFilterAbstractServiceFactory.php index 19a53b7f..c17c0800 100644 --- a/src/InputFilterAbstractServiceFactory.php +++ b/src/InputFilterAbstractServiceFactory.php @@ -81,6 +81,8 @@ protected function getInputFilterFactory(ServiceLocatorInterface $services) ->getDefaultValidatorChain() ->setPluginManager($this->getValidatorPluginManager($services)); + $this->factory->setInputFilterManager($services->get('InputFilterManager')); + return $this->factory; } diff --git a/src/InputFilterPluginManager.php b/src/InputFilterPluginManager.php index bb5bccc3..b662204f 100644 --- a/src/InputFilterPluginManager.php +++ b/src/InputFilterPluginManager.php @@ -61,8 +61,16 @@ public function populateFactory($inputFilter) $factory->setInputFilterManager($this); if ($this->serviceLocator instanceof ServiceLocatorInterface) { - $factory->getDefaultFilterChain()->setPluginManager($this->serviceLocator->get('FilterManager')); - $factory->getDefaultValidatorChain()->setPluginManager($this->serviceLocator->get('ValidatorManager')); + if ($this->serviceLocator->has('FilterManager')) { + $factory->getDefaultFilterChain()->setPluginManager( + $this->serviceLocator->get('FilterManager') + ); + } + if ($this->serviceLocator->has('ValidatorManager')) { + $factory->getDefaultValidatorChain()->setPluginManager( + $this->serviceLocator->get('ValidatorManager') + ); + } } } } diff --git a/test/InputFilterAbstractServiceFactoryTest.php b/test/InputFilterAbstractServiceFactoryTest.php index 0646044d..92a21a3a 100644 --- a/test/InputFilterAbstractServiceFactoryTest.php +++ b/test/InputFilterAbstractServiceFactoryTest.php @@ -11,6 +11,7 @@ use PHPUnit_Framework_TestCase as TestCase; use Zend\Filter\FilterPluginManager; +use Zend\InputFilter\InputFilter; use Zend\InputFilter\InputFilterPluginManager; use Zend\ServiceManager\ServiceManager; use Zend\Validator\ValidatorPluginManager; @@ -153,4 +154,30 @@ public function testRetrieveInputFilterFromInputFilterPluginManager() $inputFilter = $this->services->get('InputFilterManager')->get('foobar'); $this->assertInstanceOf('Zend\InputFilter\InputFilterInterface', $inputFilter); } + + + /** + * @depends testCreatesInputFilterInstance + */ + public function testInjectsInputFilterManagerFromServiceManager() + { + $this->services->setService('Config', array( + 'input_filter_specs' => array( + 'filter' => array(), + ), + )); + $this->filters->addAbstractFactory('ZendTest\InputFilter\TestAsset\FooAbstractFactory'); + + /** + * @type InputFilter $filter + */ + $filter = $this->factory->createServiceWithName($this->filters, 'filter', 'filter'); + + $inputFilterManager = $filter->getFactory()->getInputFilterManager(); + + $this->assertInstanceOf('Zend\InputFilter\InputFilterPluginManager', $inputFilterManager); + + $this->assertInstanceOf('ZendTest\InputFilter\TestAsset\Foo', $inputFilterManager->get('foo')); + } + } diff --git a/test/TestAsset/Foo.php b/test/TestAsset/Foo.php new file mode 100644 index 00000000..2f2855bc --- /dev/null +++ b/test/TestAsset/Foo.php @@ -0,0 +1,16 @@ +