298 Zeilen
		
	
	
	
		
			9,3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			298 Zeilen
		
	
	
	
		
			9,3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Zend Framework
 | |
|  *
 | |
|  * LICENSE
 | |
|  *
 | |
|  * This source file is subject to the new BSD license that is bundled
 | |
|  * with this package in the file LICENSE.txt.
 | |
|  * It is also available through the world-wide-web at this URL:
 | |
|  * http://framework.zend.com/license/new-bsd
 | |
|  * If you did not receive a copy of the license and are unable to
 | |
|  * obtain it through the world-wide-web, please send an email
 | |
|  * to license@zend.com so we can send you a copy immediately.
 | |
|  *
 | |
|  * @category   Zend
 | |
|  * @package    Zend_Cache
 | |
|  * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 | |
|  * @license    http://framework.zend.com/license/new-bsd     New BSD License
 | |
|  * @version    $Id$
 | |
|  */
 | |
| 
 | |
| /** @see Zend_Cache_Exception */
 | |
| require_once 'Zend/Cache/Exception.php';
 | |
| 
 | |
| /** @see Zend_Cache */
 | |
| require_once 'Zend/Cache.php';
 | |
| 
 | |
| /**
 | |
|  * @category   Zend
 | |
|  * @package    Zend_Cache
 | |
|  * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 | |
|  * @license    http://framework.zend.com/license/new-bsd     New BSD License
 | |
|  */
 | |
| class Zend_Cache_Manager
 | |
| {
 | |
|     /**
 | |
|      * Constant holding reserved name for default Page Cache
 | |
|      */
 | |
|     const PAGECACHE = 'page';
 | |
| 
 | |
|     /**
 | |
|      * Constant holding reserved name for default Page Tag Cache
 | |
|      */
 | |
|     const PAGETAGCACHE = 'pagetag';
 | |
| 
 | |
|     /**
 | |
|      * Array of caches stored by the Cache Manager instance
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     protected $_caches = array();
 | |
| 
 | |
|     /**
 | |
|      * Array of ready made configuration templates for lazy
 | |
|      * loading caches.
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     protected $_optionTemplates = array(
 | |
|         // Simple Common Default
 | |
|         'default' => array(
 | |
|             'frontend' => array(
 | |
|                 'name'    => 'Core',
 | |
|                 'options' => array(
 | |
|                     'automatic_serialization' => true,
 | |
|                 ),
 | |
|             ),
 | |
|             'backend' => array(
 | |
|                 'name'    => 'File',
 | |
|                 'options' => array(
 | |
|                     // use system temp dir by default of file backend
 | |
|                     // 'cache_dir' => '../cache',
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
| 
 | |
|         // Static Page HTML Cache
 | |
|         'page' => array(
 | |
|             'frontend' => array(
 | |
|                 'name'    => 'Capture',
 | |
|                 'options' => array(
 | |
|                     'ignore_user_abort' => true,
 | |
|                 ),
 | |
|             ),
 | |
|             'backend' => array(
 | |
|                 'name'    => 'Static',
 | |
|                 'options' => array(
 | |
|                     'public_dir' => '../public',
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
| 
 | |
|         // Tag Cache
 | |
|         'pagetag' => array(
 | |
|             'frontend' => array(
 | |
|                 'name'    => 'Core',
 | |
|                 'options' => array(
 | |
|                     'automatic_serialization' => true,
 | |
|                     'lifetime' => null
 | |
|                 ),
 | |
|             ),
 | |
|             'backend' => array(
 | |
|                 'name'    => 'File',
 | |
|                 'options' => array(
 | |
|                     // use system temp dir by default of file backend
 | |
|                     // 'cache_dir' => '../cache',
 | |
|                     // use default umask of file backend
 | |
|                     // 'cache_file_umask' => 0644
 | |
|                 ),
 | |
|             ),
 | |
|         ),
 | |
|     );
 | |
| 
 | |
|     /**
 | |
|      * Set a new cache for the Cache Manager to contain
 | |
|      *
 | |
|      * @param  string $name
 | |
|      * @param  Zend_Cache_Core $cache
 | |
|      * @return Zend_Cache_Manager
 | |
|      */
 | |
|     public function setCache($name, Zend_Cache_Core $cache)
 | |
|     {
 | |
|         $this->_caches[$name] = $cache;
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Check if the Cache Manager contains the named cache object, or a named
 | |
|      * configuration template to lazy load the cache object
 | |
|      *
 | |
|      * @param string $name
 | |
|      * @return bool
 | |
|      */
 | |
|     public function hasCache($name)
 | |
|     {
 | |
|         if (isset($this->_caches[$name])
 | |
|             || $this->hasCacheTemplate($name)
 | |
|         ) {
 | |
|             return true;
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Fetch the named cache object, or instantiate and return a cache object
 | |
|      * using a named configuration template
 | |
|      *
 | |
|      * @param  string $name
 | |
|      * @return Zend_Cache_Core
 | |
|      */
 | |
|     public function getCache($name)
 | |
|     {
 | |
|         if (isset($this->_caches[$name])) {
 | |
|             return $this->_caches[$name];
 | |
|         }
 | |
|         if (isset($this->_optionTemplates[$name])) {
 | |
|             if ($name == self::PAGECACHE
 | |
|                 && (!isset($this->_optionTemplates[$name]['backend']['options']['tag_cache'])
 | |
|                 || !$this->_optionTemplates[$name]['backend']['options']['tag_cache'] instanceof Zend_Cache_Core)
 | |
|             ) {
 | |
|                 $this->_optionTemplates[$name]['backend']['options']['tag_cache']
 | |
|                     = $this->getCache(self::PAGETAGCACHE);
 | |
|             }
 | |
| 
 | |
|             $this->_caches[$name] = Zend_Cache::factory(
 | |
|                 $this->_optionTemplates[$name]['frontend']['name'],
 | |
|                 $this->_optionTemplates[$name]['backend']['name'],
 | |
|                 isset($this->_optionTemplates[$name]['frontend']['options']) ? $this->_optionTemplates[$name]['frontend']['options'] : array(),
 | |
|                 isset($this->_optionTemplates[$name]['backend']['options']) ? $this->_optionTemplates[$name]['backend']['options'] : array(),
 | |
|                 isset($this->_optionTemplates[$name]['frontend']['customFrontendNaming']) ? $this->_optionTemplates[$name]['frontend']['customFrontendNaming'] : false,
 | |
|                 isset($this->_optionTemplates[$name]['backend']['customBackendNaming']) ? $this->_optionTemplates[$name]['backend']['customBackendNaming'] : false,
 | |
|                 isset($this->_optionTemplates[$name]['frontendBackendAutoload']) ? $this->_optionTemplates[$name]['frontendBackendAutoload'] : false
 | |
|             );
 | |
| 
 | |
|             return $this->_caches[$name];
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Fetch all available caches
 | |
|      *
 | |
|      * @return array An array of all available caches with it's names as key
 | |
|      */
 | |
|     public function getCaches()
 | |
|     {
 | |
|         $caches = $this->_caches;
 | |
|         foreach ($this->_optionTemplates as $name => $tmp) {
 | |
|             if (!isset($caches[$name])) {
 | |
|                 $caches[$name] = $this->getCache($name);
 | |
|             }
 | |
|         }
 | |
|         return $caches;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set a named configuration template from which a cache object can later
 | |
|      * be lazy loaded
 | |
|      *
 | |
|      * @param  string $name
 | |
|      * @param  array $options
 | |
|      * @return Zend_Cache_Manager
 | |
|      */
 | |
|     public function setCacheTemplate($name, $options)
 | |
|     {
 | |
|         if ($options instanceof Zend_Config) {
 | |
|             $options = $options->toArray();
 | |
|         } elseif (!is_array($options)) {
 | |
|             require_once 'Zend/Cache/Exception.php';
 | |
|             throw new Zend_Cache_Exception('Options passed must be in'
 | |
|                 . ' an associative array or instance of Zend_Config');
 | |
|         }
 | |
|         $this->_optionTemplates[$name] = $options;
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Check if the named configuration template
 | |
|      *
 | |
|      * @param  string $name
 | |
|      * @return bool
 | |
|      */
 | |
|     public function hasCacheTemplate($name)
 | |
|     {
 | |
|         if (isset($this->_optionTemplates[$name])) {
 | |
|             return true;
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get the named configuration template
 | |
|      *
 | |
|      * @param  string $name
 | |
|      * @return array
 | |
|      */
 | |
|     public function getCacheTemplate($name)
 | |
|     {
 | |
|         if (isset($this->_optionTemplates[$name])) {
 | |
|             return $this->_optionTemplates[$name];
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Pass an array containing changes to be applied to a named
 | |
|      * configuration
 | |
|      * template
 | |
|      *
 | |
|      * @param  string $name
 | |
|      * @param  array $options
 | |
|      * @return Zend_Cache_Manager
 | |
|      * @throws Zend_Cache_Exception for invalid options format or if option templates do not have $name
 | |
|      */
 | |
|     public function setTemplateOptions($name, $options)
 | |
|     {
 | |
|         if ($options instanceof Zend_Config) {
 | |
|             $options = $options->toArray();
 | |
|         } elseif (!is_array($options)) {
 | |
|             require_once 'Zend/Cache/Exception.php';
 | |
|             throw new Zend_Cache_Exception('Options passed must be in'
 | |
|                 . ' an associative array or instance of Zend_Config');
 | |
|         }
 | |
|         if (!isset($this->_optionTemplates[$name])) {
 | |
|             throw new Zend_Cache_Exception('A cache configuration template'
 | |
|                 . 'does not exist with the name "' . $name . '"');
 | |
|         }
 | |
|         $this->_optionTemplates[$name]
 | |
|             = $this->_mergeOptions($this->_optionTemplates[$name], $options);
 | |
|         return $this;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Simple method to merge two configuration arrays
 | |
|      *
 | |
|      * @param  array $current
 | |
|      * @param  array $options
 | |
|      * @return array
 | |
|      */
 | |
|     protected function _mergeOptions(array $current, array $options)
 | |
|     {
 | |
|         if (isset($options['frontend']['name'])) {
 | |
|             $current['frontend']['name'] = $options['frontend']['name'];
 | |
|         }
 | |
|         if (isset($options['backend']['name'])) {
 | |
|             $current['backend']['name'] = $options['backend']['name'];
 | |
|         }
 | |
|         if (isset($options['frontend']['options'])) {
 | |
|             foreach ($options['frontend']['options'] as $key=>$value) {
 | |
|                 $current['frontend']['options'][$key] = $value;
 | |
|             }
 | |
|         }
 | |
|         if (isset($options['backend']['options'])) {
 | |
|             foreach ($options['backend']['options'] as $key=>$value) {
 | |
|                 $current['backend']['options'][$key] = $value;
 | |
|             }
 | |
|         }
 | |
|         return $current;
 | |
|     }
 | |
| }
 |