Как стать автором
Поиск
Написать публикацию
Обновить

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

Время на прочтение3 мин
Количество просмотров2.6K
Всем привет. Сразу хочу сказать что статья рас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

Удачного дня, надеюсь сумел вас заинтересовать, если вы дочитали до сюда=)
Теги:
Хабы:
Всего голосов 7: ↑7 и ↓0+7
Комментарии16

Публикации

Ближайшие события