Pull to refresh

Cache ресурс для Zend Framework

Reading time3 min
Views2.5K
Всем привет. Сразу хочу сказать что статья расcчитана для тех, кто уже хорошо знаком с данным фреймворком. В новых версиях Zend Framework придумана концепция инициализации компонентов приложения через плагины ресурсов. В стандартной поставке имеется достаточное их количество, но одного я так и не нашел. Таковым является кэш. Побродив по просторам Интернета и не найдя аналогов, я решил написать свой. И так, приступим.



Кастомные ресурсы будем хранить в папке library/app/application/resource. Кладем туда файл Cache.php со соедующим исходным кодом:

<?php

class App_Application_Resource_Cache extends Zend_Application_Resource_ResourceAbstract
{
  /**
   * Default registry key
   */
  const DEFAULT_REGISTRY_KEY = 'App_Cache';

  /**
   * Cache instance
   *
   * @var Zend_Cache
   */
  protected $_cache = null;

  /**
   * Inititalize cache resource
   *
   * @return Zend_Cache
   */
  public function init ()
  {
    return $this->getCache();
  }

  /**
   * Return cache instance
   *
   * @return Zend_Cache
   */
  public function getCache ()
  {
    if (null === $this->_cache) {
      $options = $this->getOptions();

      /// create cache instance
      $this->_cache = Zend_Cache::factory(
        $options['frontend']['adapter'],
        $options['backend']['adapter'],
        $options['frontend']['params'],
        $options['backend']['params']
      );

      /// use as default database metadata cache
      if (isset($options['isDefaultMetadataCache']) && true === (bool) $options['isDefaultMetadataCache']) {
        Zend_Db_Table_Abstract::setDefaultMetadataCache($this->_cache);
      }

      /// use as default translate cache
      if (isset($options['isDefaultTranslateCache']) && true === (bool) $options['isDefaultTranslateCache']) {
        Zend_Translate::setCache($this->_cache);
      }

      /// use as default locale cache
      if (isset($options['isDefaultLocaleCache']) && true === (bool) $options['isDefaultLocaleCache']) {
        Zend_Locale::setCache($this->_cache);
      }

      /// add to registry
      $key = (isset($options['registry_key']) && !is_numeric($options['registry_key'])) ? $options['registry_key'] : self::DEFAULT_REGISTRY_KEY;
      Zend_Registry::set($key, $this->_cache);
    }
    return $this->_cache;
  }
}


* This source code was highlighted with Source Code Highlighter.


Теперь инициализировать кэш можно с помощью конфига приложения:

# cache
resources.cache.frontend.adapter = core
resources.cache.frontend.params.lifetime = 7200
resources.cache.frontend.params.automatic_serialization = true
resources.cache.backend.adapter = file
resources.cache.backend.params.lifetime = 7200
resources.cache.backend.params.cache_dir = APPLICATION_PATH "/../trash/cache"
resources.cache.isDefaultMetadataCache = true
resources.cache.isDefaultTranslateCache = true
resources.cache.isDefaultLocaleCache = true
resources.cache.registry_key = cache

Так же надо в конфиг добавить следующую строку, чтобы работали кастомные ресурсы:

# custom resources
pluginPaths.App_Application_Resource_ = App/Application/Resource

Удачного дня, надеюсь сумел вас заинтересовать, если вы дочитали до сюда=)
Tags:
Hubs:
Total votes 7: ↑7 and ↓0+7
Comments16

Articles