示例#1
0
 /**
  * Get new model instance via service manager
  *
  * This method allows temporarily overriding services with manually supplied
  * instances. This is useful for injecting mock objects which will be passed
  * to the model's constructor by a factory. A clone of the service manager is
  * used to avoid interference with other tests.
  *
  * @param array $overrideServices Optional associative array (name => instance) with services to override
  * @return object Model instance
  */
 protected function _getModel(array $overrideServices = array())
 {
     if (empty($overrideServices)) {
         $serviceManager = static::$serviceManager;
     } else {
         // Create temporary service manager with identical configuration.
         $config = static::$serviceManager->get('config');
         $serviceManager = new \Zend\ServiceManager\ServiceManager($config['service_manager']);
         // Clone 'config' service
         $serviceManager->setService('config', $config);
         // If not explicitly overridden, copy database services to avoid
         // expensive reconnect or table setup which has already been done.
         if (!isset($overrideServices['Db'])) {
             $serviceManager->setService('Db', static::$serviceManager->get('Db'));
         }
         if (!isset($overrideServices['Database\\Nada'])) {
             $serviceManager->setService('Database\\Nada', static::$serviceManager->get('Database\\Nada'));
         }
         // Override specified services
         foreach ($overrideServices as $name => $service) {
             $serviceManager->setService($name, $service);
         }
     }
     // Always build a new instance.
     return $serviceManager->build($this->_getClass());
 }