Всем привет. Сразу хочу сказать что статья расcчитана для тех, кто уже хорошо знаком с данным фреймворком. В новых версиях Zend Framework придумана концепция инициализации компонентов приложения через плагины ресурсов. В стандартной поставке имеется достаточное их количество, но одного я так и не нашел. Таковым является кэш. Побродив по просторам Интернета и не найдя аналогов, я решил написать свой. И так, приступим.
Кастомные ресурсы будем хранить в папке library/app/application/resource. Кладем туда файл Cache.php со соедующим исходным кодом:
Теперь инициализировать кэш можно с помощью конфига приложения:
# 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
Удачного дня, надеюсь сумел вас заинтересовать, если вы дочитали до сюда=)
Кастомные ресурсы будем хранить в папке 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
Удачного дня, надеюсь сумел вас заинтересовать, если вы дочитали до сюда=)