Cache Resource for Zend Framework

Published on December 14, 2009

Cache Resource for Zend Framework

    Hello. I want to say right away that the article is designed for those who are already familiar with this framework. In new versions of the Zend Framework, the concept of initializing application components through resource plugins has been invented. There is a sufficient number of them in the standard delivery, but I have not found one. That is the cache. After wandering around the Internet and not finding analogues, I decided to write my own. And so, let's get started.



    We will store custom resources in the library / app / application / resource folder. We put the Cache.php file with the source code connected there:

    <?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.


    Now you can initialize the cache using the application config:

    # 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 We

    also need to add the following line to the config for custom resources to work:

    # custom resources
    pluginPaths.App_Application_Resource_ = App / Application / Resource Have a nice

    day, I hope I managed to interest you if you read it up here =)