%PDF- %PDF-
Direktori : /home/tojsat/public_html/ydx/book/vendor/zendframework/zend-cache/src/ |
Current File : /home/tojsat/public_html/ydx/book/vendor/zendframework/zend-cache/src/StorageFactory.php |
<?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Cache; use Traversable; use Zend\EventManager\EventsCapableInterface; use Zend\Stdlib\ArrayUtils; abstract class StorageFactory { /** * Plugin manager for loading adapters * * @var null|Storage\AdapterPluginManager */ protected static $adapters = null; /** * Plugin manager for loading plugins * * @var null|Storage\PluginManager */ protected static $plugins = null; /** * The storage factory * This can instantiate storage adapters and plugins. * * @param array|Traversable $cfg * @return Storage\StorageInterface * @throws Exception\InvalidArgumentException */ public static function factory($cfg) { if ($cfg instanceof Traversable) { $cfg = ArrayUtils::iteratorToArray($cfg); } if (!is_array($cfg)) { throw new Exception\InvalidArgumentException( 'The factory needs an associative array ' . 'or a Traversable object as an argument' ); } // instantiate the adapter if (!isset($cfg['adapter'])) { throw new Exception\InvalidArgumentException('Missing "adapter"'); } $adapterName = $cfg['adapter']; $adapterOptions = array(); if (is_array($cfg['adapter'])) { if (!isset($cfg['adapter']['name'])) { throw new Exception\InvalidArgumentException('Missing "adapter.name"'); } $adapterName = $cfg['adapter']['name']; $adapterOptions = isset($cfg['adapter']['options']) ? $cfg['adapter']['options'] : array(); } if (isset($cfg['options'])) { $adapterOptions = array_merge($adapterOptions, $cfg['options']); } $adapter = static::adapterFactory((string) $adapterName, $adapterOptions); // add plugins if (isset($cfg['plugins'])) { if (!$adapter instanceof EventsCapableInterface) { throw new Exception\RuntimeException(sprintf( "The adapter '%s' doesn't implement '%s' and therefore can't handle plugins", get_class($adapter), 'Zend\EventManager\EventsCapableInterface' )); } if (!is_array($cfg['plugins'])) { throw new Exception\InvalidArgumentException( 'Plugins needs to be an array' ); } foreach ($cfg['plugins'] as $k => $v) { $pluginPrio = 1; // default priority if (is_string($k)) { if (!is_array($v)) { throw new Exception\InvalidArgumentException( "'plugins.{$k}' needs to be an array" ); } $pluginName = $k; $pluginOptions = $v; } elseif (is_array($v)) { if (!isset($v['name'])) { throw new Exception\InvalidArgumentException("Invalid plugins[{$k}] or missing plugins[{$k}].name"); } $pluginName = (string) $v['name']; if (isset($v['options'])) { $pluginOptions = $v['options']; } else { $pluginOptions = array(); } if (isset($v['priority'])) { $pluginPrio = $v['priority']; } } else { $pluginName = $v; $pluginOptions = array(); } $plugin = static::pluginFactory($pluginName, $pluginOptions); $adapter->addPlugin($plugin, $pluginPrio); } } return $adapter; } /** * Instantiate a storage adapter * * @param string|Storage\StorageInterface $adapterName * @param array|Traversable|Storage\Adapter\AdapterOptions $options * @return Storage\StorageInterface * @throws Exception\RuntimeException */ public static function adapterFactory($adapterName, $options = array()) { if ($adapterName instanceof Storage\StorageInterface) { // $adapterName is already an adapter object $adapter = $adapterName; } else { $adapter = static::getAdapterPluginManager()->get($adapterName); } if ($options) { $adapter->setOptions($options); } return $adapter; } /** * Get the adapter plugin manager * * @return Storage\AdapterPluginManager */ public static function getAdapterPluginManager() { if (static::$adapters === null) { static::$adapters = new Storage\AdapterPluginManager(); } return static::$adapters; } /** * Change the adapter plugin manager * * @param Storage\AdapterPluginManager $adapters * @return void */ public static function setAdapterPluginManager(Storage\AdapterPluginManager $adapters) { static::$adapters = $adapters; } /** * Resets the internal adapter plugin manager * * @return void */ public static function resetAdapterPluginManager() { static::$adapters = null; } /** * Instantiate a storage plugin * * @param string|Storage\Plugin\PluginInterface $pluginName * @param array|Traversable|Storage\Plugin\PluginOptions $options * @return Storage\Plugin\PluginInterface * @throws Exception\RuntimeException */ public static function pluginFactory($pluginName, $options = array()) { if ($pluginName instanceof Storage\Plugin\PluginInterface) { // $pluginName is already a plugin object $plugin = $pluginName; } else { $plugin = static::getPluginManager()->get($pluginName); } if (!$options instanceof Storage\Plugin\PluginOptions) { $options = new Storage\Plugin\PluginOptions($options); } if ($options) { $plugin->setOptions($options); } return $plugin; } /** * Get the plugin manager * * @return Storage\PluginManager */ public static function getPluginManager() { if (static::$plugins === null) { static::$plugins = new Storage\PluginManager(); } return static::$plugins; } /** * Change the plugin manager * * @param Storage\PluginManager $plugins * @return void */ public static function setPluginManager(Storage\PluginManager $plugins) { static::$plugins = $plugins; } /** * Resets the internal plugin manager * * @return void */ public static function resetPluginManager() { static::$plugins = null; } }