RSS

Обсуждаемые вопросы: Zend Framework,
информационная безопасность, CMF, CSS + HTML,
AJAX, PHP, веб-программирование и многое другое.

 
 
Анатолий Скорняков
2009—2012
Контактная информация
Живу в Белгороде
Сделано у Беликова
Алексей Беликов
 
 

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

14 декабря 2009 г, 21:18

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

Автор: axsad

Кастомные ресурсы будем хранить в папке 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']) {
 Singular_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;
 }
}

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

     # 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

Удачного дня, надеюсь сумел вас заинтересовать, если вы дочитали до сюда=)

Комментарии

  1. Для frontend это несколько бессмысленно, т.к. он в каждом случае будет разный. Для backend это тоже верно, но реже.
    Было бы реалистейчней, если плагин поддерживал несколько именованных frontend и backend, а доступ к ним получать через их имя. Что-то типа:

    resources.cache.frontend.translate.adapter = core
    resources.cache.frontend.translate.params.lifetime = 7200

    resources.cache.frontend.locale.adapter = core
    resources.cache.frontend.locale.params.lifetime = 720000

Оставить комментарий