php - Different uses of ServiceLocatorInterface in ZF2 Application -


i have 2 factories.

the first controller factory:

    <?php     namespace blog\factory;      use blog\controller\listcontroller;     use zend\servicemanager\factoryinterface;     use zend\servicemanager\servicelocatorinterface;      class listcontrollerfactory implements factoryinterface     {         public function createservice(servicelocatorinterface $servicelocator)         {             $realservicelocator = $servicelocator->getservicelocator();                     $postservice = $realservicelocator->get('blog\service\postserviceinterface');             return new listcontroller($postservice);         }     } 

the second post servicefactory:

    <?php     namespace blog\factory;      use blog\service\postservice;     use zend\servicemanager\factoryinterface;     use zend\servicemanager\servicelocatorinterface;      class postservicefactory implements factoryinterface     {          /**           * create service           *           * @param servicelocatorinterface $servicelocator           * @return mixed           */          public function createservice(servicelocatorinterface $servicelocator)          {              return new postservice(                  $servicelocator->get('blog\mapper\postmapperinterface')              );          }     } 

here module config:

    <?php     return array(         'service_manager' => array(             'factories' => array(                 'blog\service\postserviceinterface' => 'blog\factory\postservicefactory'             )         ),         'controllers' => array(             'factories' => array(                 'blog\controller\list' => 'blog\factory\listcontrollerfactory'             )         ),         'router' => array(             // open configuration possible routes             'routes' => array(                 // define new route called "post"                 'post' => array(                     // define routes type "zend\mvc\router\http\literal", string                     'type' => 'literal',                     // configure route                     'options' => array(                         // listen "/blog" uri                         'route'    => '/blog',                         // define default controller , action called when route matched                         'defaults' => array(                             'controller' => 'blog\controller\list',                             'action'     => 'index',                         )                     )                 )             )         ),         'view_manager' => array(             'template_path_stack' => array(                 __dir__ . '/../view',             ),         )     ); 

in controller factory, have call getservicelocator against servicelocatorinterface, followed get call. in post service factory call get. did dump , looks both zend\servicemanager\servicemanager classes. when tried performing getservicelocator call against post service factory service locator errored no method found.

im not quite understanding whats going on?

controller factories called in different way casual service factories. servicelocator passed createservice not servicemanager looking instance of controllermanager.

if try this:

public function createservice(servicelocatorinterface $servicelocator) {     $realservicelocator = $servicelocator->getservicelocator();     $postservice = $realservicelocator->get('blog\service\postserviceinterface');      var_dump(get_class($servicelocator));      return new listcontroller(postservice ); } 

you'll output:

string(37) "zend\mvc\controller\controllermanager" 

while same dump in postservicefactory give you:

string(34) "zend\servicemanager\servicemanager" 

from zend 2 documentation:

http://framework.zend.com/manual/current/en/in-depth-guide/services-and-servicemanager.html#writing-a-factory-class

when using factory-class called controllermanager inject $servicelocator. however, need real servicemanager our service-classes. why call function getservicelocator() give real servicemanager.


Comments

Popular posts from this blog

php - Invalid Cofiguration - yii\base\InvalidConfigException - Yii2 -

How to show in django cms breadcrumbs full path? -

ruby on rails - npm error: tunneling socket could not be established, cause=connect ETIMEDOUT -