Question: What is Service Manager?
Service Manager is component which have lot of services and used to set/get the service on the requirement. It implemented on "Service Locator" design Pattern.
Question: What is Service Locator?
The Service Locator is a service/object locator, which are used to retrieving other objects.
Question: What is Service Locator Pattern?
Service Locator Pattern is a design Pattern which is used to locate various services. this design pattern used by "Service Locator Service" to get the appropriate service.
Question: What are Service Factories?
Instead of getting actual object instance or a class name, We can also the ServiceManager to invoke a provided factory to get the object instance.
Question: How to create Service Factories?Giv an Example?
You can also create your own serverice factory using Zend\ServiceManager\FactoryInterface and Zend\ServiceManager\ServiceLocatorInterface.
See Example
use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; class MyNewFactory implements FactoryInterface { public function createService(ServiceLocatorInterface $serviceLocator) { /** Return the data Return the data **/ } } //Set the Factory $serviceManager->setFactory('my-new-factory-name', new MyFactory()); //Get the Factory $serviceManager->get('my-new-factory-name'));
Question: How to register an Object in Service manager?
$serviceManager->setService('new_obj_class1', new stdClass()); $serviceManager->setService('new_obj_class1'); // an instance of stdClass
Question: How to create aliases of any registered service?
$serviceManager->setService('my-object', $myObject); $serviceManager->setAlias('my-alias1', 'my-object'); $serviceManager->setAlias('my-alias2', 'my-alias1') /** my-object, my-alias1 and my-alias2 return same object **/
Question: What is use of setInvokableClass?
setInvokableClass allows you to tell the ServiceManager what class to instantiate when a particular service is requested.
$serviceManager->setInvokableClass('service-name', 'Fully\Qualified\ClassName');
Question: What is file location path Where we can set the configuration setting?
/module/module-name/config/module.config.php
Question: What are various service manager setting which we can set?
We can set abstract_factories, aliases,factories,invokables, services and shared.
Question: Give an example of service manager config?
return array( 'service_manager' => array( 'abstract_factories' => array( 'Module-Name\Service\FallbackFactory', ), 'aliases' => array( 'SomeModule\Model\User' => 'User', 'AdminUser' => 'User', 'SuperUser' => 'AdminUser', ), 'factories' => array( 'User' => 'SomeModule\Service\UserFactory', 'UserForm' => function ($serviceManager) { $formObject = new SomeModule\Form\User(); $formObject->setInputFilter($serviceManager->get('UserInputFilter')); return $formObject; }, ), 'invokables' => array( 'UserInputFilter' => 'SomeModule\InputFilter\User', ), 'services' => array( // Auth is the service names // Values are objects 'Auth' => new SomeModule\Authentication\AuthenticationService(), ), 'shared' => array( 'UserForm' => false, ), ), );