Пример #1
0
 /**
  * Create the controller loader service
  *
  * Creates and returns a scoped service manager. The only controllers
  * this manager will allow are those defined in the application
  * configuration's "controllers" array. If a controller is matched, the
  * scoped manager will attempt to load the controller, pulling it from
  * a DI service if a matching service is not found. Finally, it will
  * attempt to inject the controller plugin manager if the controller
  * implements a setPluginManager() method.
  *
  * @param  ServiceLocatorInterface $serviceLocator
  * @return ServiceManager
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     if (!$serviceLocator instanceof ServiceManager) {
         return $serviceLocator;
     }
     $controllerLoader = $serviceLocator->createScopedServiceManager();
     $configuration = $serviceLocator->get('Configuration');
     if (isset($configuration['di']) && $serviceLocator->has('Di')) {
         $di = $serviceLocator->get('Di');
         $controllerLoader->addAbstractFactory(new DiAbstractServiceFactory($di, DiAbstractServiceFactory::USE_SL_BEFORE_DI));
         $controllerLoader->addInitializer(new DiServiceInitializer($di, $serviceLocator));
     }
     $controllerLoader->addInitializer(function ($instance) use($serviceLocator) {
         if ($instance instanceof ServiceLocatorAwareInterface) {
             $instance->setServiceLocator($serviceLocator->get('Zend\\ServiceManager\\ServiceLocatorInterface'));
         }
         if ($instance instanceof EventManagerAwareInterface) {
             $instance->setEventManager($serviceLocator->get('EventManager'));
         }
         if (method_exists($instance, 'setPluginManager')) {
             $instance->setPluginManager($serviceLocator->get('ControllerPluginBroker'));
         }
     });
     return $controllerLoader;
 }
Пример #2
0
    /**
     * Create the controller loader service
     *
     * Creates and returns a scoped service manager. The only controllers 
     * this manager will allow are those defined in the application 
     * configuration's "controllers" array. If a controller is matched, the
     * scoped manager will attempt to load the controller, pulling it from 
     * a DI service if a matching service is not found. Finally, it will
     * attempt to inject the controller plugin broker into the controller if
     * it subscribes to the Pluggable interface.
     * 
     * @param  ServiceLocatorInterface $serviceLocator 
     * @return ServiceManager
     */
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        if (!$serviceLocator instanceof ServiceManager) {
            return $serviceLocator;
        }

        $controllerLoader = $serviceLocator->createScopedServiceManager();
        $configuration    = $serviceLocator->get('Configuration');


        if (isset($configuration['controller'])) {
            foreach ($configuration['controller'] as $type => $specs) {
                if ($type == 'classes') {
                    foreach ($specs as $name => $value) {
                        $controllerLoader->setInvokableClass($name, $value);
                    }
                }
                if ($type == 'factories') {
                    foreach ($specs as $name => $value) {
                        $controllerLoader->setFactory($name, $value);
                    }
                }
            }
        }

        if (isset($configuration['di']) && $serviceLocator->has('Di')) {
            $di = $serviceLocator->get('Di');
            $controllerLoader->addAbstractFactory(
                new DiAbstractServiceFactory($di, DiAbstractServiceFactory::USE_SL_BEFORE_DI)
            );
            $controllerLoader->addInitializer(
                new DiServiceInitializer($di, $serviceLocator)
            );
        }

        $controllerLoader->addInitializer(function ($instance) use ($serviceLocator) {
            if ($instance instanceof ServiceLocatorAwareInterface) {
                $instance->setServiceLocator($serviceLocator->get('Zend\ServiceManager\ServiceLocatorInterface'));
            }

            if ($instance instanceof EventManagerAwareInterface) {
                $instance->setEventManager($serviceLocator->get('EventManager'));
            }

            if ($instance instanceof Pluggable) {
                $instance->setBroker(clone $serviceLocator->get('ControllerPluginBroker'));
            }
        });

        return $controllerLoader;
    }
 /**
  * Create the controller loader service
  *
  * Creates and returns a scoped service manager. The only controllers 
  * this manager will allow are those defined in the application 
  * configuration's "controllers" array. If a controller is matched, the
  * scoped manager will attempt to load the controller, pulling it from 
  * a DI service if a matching service is not found. Finally, it will
  * attempt to inject the controller plugin broker into the controller if
  * it subscribes to the Pluggable interface.
  * 
  * @param  ServiceLocatorInterface $serviceLocator 
  * @return ServiceManager
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     if (!$serviceLocator instanceof ServiceManager) {
         return $serviceLocator;
     }
     $controllerLoader = $serviceLocator->createScopedServiceManager();
     $configuration = $serviceLocator->get('Configuration');
     $routeMatch = $serviceLocator->get('application')->getMvcEvent()->getRouteMatch();
     if ($routeMatch && $routeMatch instanceof \Zend\Mvc\Router\RouteMatch) {
         $routeMatchName = $routeMatch->getMatchedRouteName();
         $controllerName = $routeMatch->getParam('controller');
         if (isset($configuration['router']['routes'][$routeMatchName]) && ($routeConfiguration = $configuration['router']['routes'][$routeMatchName])) {
             if (isset($routeConfiguration['type']) && $routeConfiguration['type'] === 'Eva\\Mvc\\Router\\Http\\ModuleRoute') {
                 $configuration['controller']['classes'][$controllerName] = $controllerName;
             }
         }
     }
     if (isset($configuration['controller'])) {
         foreach ($configuration['controller'] as $type => $specs) {
             if ($type == 'classes') {
                 foreach ($specs as $name => $value) {
                     $controllerLoader->setInvokableClass($name, $value);
                 }
             }
             if ($type == 'factories') {
                 foreach ($specs as $name => $value) {
                     $controllerLoader->setFactory($name, $value);
                 }
             }
         }
     }
     if (isset($configuration['di']) && $serviceLocator->has('Di')) {
         $di = $serviceLocator->get('Di');
         $controllerLoader->addAbstractFactory(new DiAbstractServiceFactory($di, DiAbstractServiceFactory::USE_SL_BEFORE_DI));
         $controllerLoader->addInitializer(new DiServiceInitializer($di, $serviceLocator));
     }
     $controllerLoader->addInitializer(function ($instance) use($serviceLocator) {
         if ($instance instanceof ServiceLocatorAwareInterface) {
             $instance->setServiceLocator($serviceLocator->get('Zend\\ServiceManager\\ServiceLocatorInterface'));
         }
         if ($instance instanceof EventManagerAwareInterface) {
             $instance->setEventManager($serviceLocator->get('EventManager'));
         }
         if ($instance instanceof Pluggable) {
             $instance->setBroker(clone $serviceLocator->get('ControllerPluginBroker'));
         }
     });
     return $controllerLoader;
 }