Zend круговой вопрос зависимости

У меня есть метод в моей начальной загрузке, который устанавливает кеши для приложения:

protected function _initSetCaches()
{
    $this->bootstrap(array('Db','CacheManager'));
    Zend_Db_Table_Abstract::setDefaultMetadataCache(Master::cache('database'));
    Zend_Translate::setCache(Master::cache());
    Zend_Date::setOptions(array('cache' => Master::cache()));
    Zend_Paginator::setCache(Master::cache());
    Zend_Locale::setCache(Master::cache());
    Zend_Locale_Data::setCache(Master::cache());
 }

Как видите, я установил различные кеши от вызова мастер-класса, содержащего метод кеша. В методе кеша я получаю объект начальной загрузки (self::bootstrap()) а затем получить тип кэша из ресурса cachemanager. Вот метод кеша в моем мастер-классе:

public static function cache($type='core')
{
    $registryKey = 'master_cache_' . $type;
    if(!self::registry($registryKey)){
        $manager = self::bootstrap()->getPluginResource('cachemanager')->getCacheManager();
        if(!$manager->hasCache($type)){
             self::throwException(sprintf("%s is not an available cache",$type));
        }
        $cache = $manager->getCache($type);
        self::register($registryKey,$cache);
     }
     return self::registry($registryKey);
}

Как видите, этот метод извлекает менеджер кэша из начальной загрузки (self::bootstrap()). Моя проблема заключается в следующем... Если я реализую свой метод начальной загрузки следующим образом (регистрация начальной загрузки путем извлечения ее через объект приложения (self::app()):

public static function bootstrap()
{
    if(!self::registry('master_bootstrap')){
        self::register('master_bootstrap', self::app()->getBootstrap());
    }
    return self::registry('master_bootstrap');
}

тогда все работает нормально. Однако эта реализация отличается от той, что была у меня изначально, и, следовательно, создает исключение циклической зависимости. Вот моя оригинальная реализация:

public static function bootstrap()
{
      return self::app()->getBootstrap();
}

Меня смущает, почему, когда я регистрирую загрузчик в глобальном реестре, я могу использовать метод кеша, однако, если я просто возвращаю объект начальной загрузки напрямую, это приводит к циклической проблеме зависимости. Разве реализация, в которой я регистрирую объект начальной загрузки в глобальном реестре, все еще вызывает циклическую зависимость?

0 ответов

Другие вопросы по тегам