/** * Instanciate a resource model * * @param string $resourceModel * @param string $context * @param array $params * @return Nova_Core_ResourceInterface */ public static function getResourceModel($resourceModel, $context = NULL, $params = array()) { if (is_null($context)) { $context = self::RESOURCE_DEFAULT_CONTEXT; } $offset = strpos($resourceModel, '/'); if ($offset === false) { self::throwException('core/exception', 'Wrong class identifier format.'); } $moduleName = substr($resourceModel, 0, $offset); $classSuffix = substr($resourceModel, $offset + 1); if (isset(self::$_resourceModelClassCache[$moduleName]) && isset(self::$_resourceModelClassCache[$moduleName][$classSuffix]) && isset(self::$_resourceModelClassCache[$moduleName][$classSuffix][$context])) { $className = self::$_resourceModelClassCache[$moduleName][$classSuffix][$context]; } else { Nova::profilerStart("CORE.RESOURCE.LOAD " . __METHOD__ . " [{$resourceModel}]"); // TODO : implement a clean configuration loading if (is_null(self::$_modelsConfig)) { Nova::profilerStart("CORE.MODEL.CONFIG.LOAD"); self::$_modelsConfig = new Zend_Config(self::app()->getConfig('global.models')); Nova::profilerStop("CORE.MODEL.CONFIG.LOAD"); } //TODO : implement a clean configuration navigation $config = self::$_modelsConfig->get($moduleName)->get('resource')->get($context); if (!$config) { Nova::profilerStop("CORE.RESOURCE.LOAD " . __METHOD__ . " [{$resourceModel}]"); return NULL; } else { if ($config->get('rewrite') && $config->get('rewrite')->get($classSuffix)) { $className = $config->get('rewrite')->get($classSuffix); } else { $className = $config->get('class_prefix') . self::_translateClassName($classSuffix); } } self::$_resourceModelClassCache[$moduleName][$classSuffix][$context] = $className; Nova::profilerStop("CORE.RESOURCE.LOAD " . __METHOD__ . " [{$resourceModel}]"); } $reflectionClass = new ReflectionClass($className); if ($reflectionClass->isSubclassOf('Nova_Core_Object')) { $object = $reflectionClass->newInstance($moduleName, $params); } else { $object = $reflectionClass->newInstanceArgs($params); } return $object; }