/**
  * Create the controller loader service
  *
  * Creates and returns an instance of ControllerManager. 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.
  * Finally, it will attempt to inject the controller plugin manager
  * if the controller implements a setPluginManager() method.
  *
  * This plugin manager is _not_ peered against DI, and as such, will
  * not load unknown classes.
  *
  * @param  ServiceLocatorInterface $serviceLocator
  * @return ControllerManager
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     $controllerLoader = new ControllerManager();
     $controllerLoader->setServiceLocator($serviceLocator);
     $controllerLoader->addPeeringServiceManager($serviceLocator);
     $config = $serviceLocator->get('Config');
     if (isset($config['di']) && isset($config['di']['allowed_controllers']) && $serviceLocator->has('Di')) {
         $controllerLoader->addAbstractFactory($serviceLocator->get('DiStrictAbstractServiceFactory'));
     }
     return $controllerLoader;
 }
 public function setUp()
 {
     $this->services = $services = new ServiceManager();
     $this->controllers = $controllers = new ControllerManager();
     $this->factory = $factory = new ResourceControllerFactory();
     $controllers->addAbstractFactory($factory);
     $controllers->setServiceLocator($services);
     $services->setService('Zend\\ServiceManager\\ServiceLocatorInterface', $services);
     $services->setService('Config', $this->getConfig());
     $services->setService('ControllerLoader', $controllers);
     $services->setFactory('ControllerPluginManager', 'Zend\\Mvc\\Service\\ControllerPluginManagerFactory');
     $services->setInvokableClass('EventManager', 'Zend\\EventManager\\EventManager');
     $services->setInvokableClass('SharedEventManager', 'Zend\\EventManager\\SharedEventManager');
     $services->setShared('EventManager', false);
 }
 public function getServiceManager()
 {
     $controllers = new ControllerManager();
     $controllers->addAbstractFactory('ZF\\Rest\\Factory\\RestControllerFactory');
     $services = new ServiceManager();
     $services->setService('Zend\\ServiceManager\\ServiceLocatorInterface', $services);
     $services->setService('ControllerLoader', $controllers);
     $services->setService('Config', ['zf-rest' => ['Api\\RestController' => ['listener' => 'CollectionIntegrationListener', 'page_size' => 3, 'route_name' => 'resource', 'route_identifier_name' => 'id', 'collection_name' => 'items', 'collection_query_whitelist' => ['query']]]]);
     $services->setInvokableClass('SharedEventManager', 'Zend\\EventManager\\SharedEventManager');
     $services->setInvokableClass('CollectionIntegrationListener', 'ZFTest\\Rest\\TestAsset\\CollectionIntegrationListener');
     $services->setFactory('EventManager', 'Zend\\Mvc\\Service\\EventManagerFactory');
     $services->setFactory('ControllerPluginManager', 'Zend\\Mvc\\Service\\ControllerPluginManagerFactory');
     $services->setShared('EventManager', false);
     $collection = $this->setUpCollection();
     $services->addInitializer(function ($instance, $services) use($collection) {
         if (!$instance instanceof TestAsset\CollectionIntegrationListener) {
             return;
         }
         $instance->setCollection($collection);
     });
     $controllers->setServiceLocator($services);
     $plugins = $services->get('ControllerPluginManager');
     $plugins->setService('Hal', $this->linksHelper);
     return $services;
 }