Search code examples
zend-frameworkzend-framework2zf3

Zend framework: how to pass creation options to services


When registering a service in module.config.php like

'service_manager' => [
    'factories' => [
        \Path\To\Your\Service\AService => \Path\To\Your\Service\Factory\AServiceFactory,
    ]
]

I can't pass in creation options when calling the service factory neither in ZF2 (when the factory implements MutableCreationOptionsInterface) nor in ZF3 (via $container->get(\Path\To\Your\Service\AService::class, $options).

Could anyone tell me how to pass the creation options to the services?


Solution

  • MutableOptions is currently only available on plugin manager instances; the service manager does not implement it. This is why you see the discrepancy.

    Références : https://github.com/zendframework/zend-servicemanager/issues/7

    Sample : https://samsonasik.wordpress.com/2014/08/14/zend-framework-2-using-creationoptions-in-pluginmanager/

    COMPLEMENT

    My solution is to add a method with a fluent pattern to the AService class :

    class AService
    {
        public function __construct(...)
        {
            //your code, you can inject variables from $container by AServiceFactory
        }
        public function setOptions($options)
        {
            // your setting from $options
            ...
            // fluent pattern
            return $this; 
        }
    }
    

    To use your service :

    $container->get(\Path\To\Your\Service\Aservice::class)->setOptions($options);