123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?php
- namespace Guzzle\Cache;
- use Doctrine\Common\Cache\Cache;
- use Guzzle\Common\Version;
- use Guzzle\Common\Exception\InvalidArgumentException;
- use Guzzle\Common\Exception\RuntimeException;
- use Guzzle\Common\FromConfigInterface;
- use Zend\Cache\Storage\StorageInterface;
- /**
- * Generates cache adapters from any number of known cache implementations
- */
- class CacheAdapterFactory implements FromConfigInterface
- {
- /**
- * Create a Guzzle cache adapter based on an array of options
- *
- * @param mixed $cache Cache value
- *
- * @return CacheAdapterInterface
- * @throws InvalidArgumentException
- */
- public static function fromCache($cache)
- {
- if (!is_object($cache)) {
- throw new InvalidArgumentException('Cache must be one of the known cache objects');
- }
- if ($cache instanceof CacheAdapterInterface) {
- return $cache;
- } elseif ($cache instanceof Cache) {
- return new DoctrineCacheAdapter($cache);
- } elseif ($cache instanceof StorageInterface) {
- return new Zf2CacheAdapter($cache);
- } else {
- throw new InvalidArgumentException('Unknown cache type: ' . get_class($cache));
- }
- }
- /**
- * Create a Guzzle cache adapter based on an array of options
- *
- * @param array $config Array of configuration options
- *
- * @return CacheAdapterInterface
- * @throws InvalidArgumentException
- * @deprecated This will be removed in a future version
- * @codeCoverageIgnore
- */
- public static function factory($config = array())
- {
- Version::warn(__METHOD__ . ' is deprecated');
- if (!is_array($config)) {
- throw new InvalidArgumentException('$config must be an array');
- }
- if (!isset($config['cache.adapter']) && !isset($config['cache.provider'])) {
- $config['cache.adapter'] = 'Guzzle\Cache\NullCacheAdapter';
- $config['cache.provider'] = null;
- } else {
- // Validate that the options are valid
- foreach (array('cache.adapter', 'cache.provider') as $required) {
- if (!isset($config[$required])) {
- throw new InvalidArgumentException("{$required} is a required CacheAdapterFactory option");
- }
- if (is_string($config[$required])) {
- // Convert dot notation to namespaces
- $config[$required] = str_replace('.', '\\', $config[$required]);
- if (!class_exists($config[$required])) {
- throw new InvalidArgumentException("{$config[$required]} is not a valid class for {$required}");
- }
- }
- }
- // Instantiate the cache provider
- if (is_string($config['cache.provider'])) {
- $args = isset($config['cache.provider.args']) ? $config['cache.provider.args'] : null;
- $config['cache.provider'] = self::createObject($config['cache.provider'], $args);
- }
- }
- // Instantiate the cache adapter using the provider and options
- if (is_string($config['cache.adapter'])) {
- $args = isset($config['cache.adapter.args']) ? $config['cache.adapter.args'] : array();
- array_unshift($args, $config['cache.provider']);
- $config['cache.adapter'] = self::createObject($config['cache.adapter'], $args);
- }
- return $config['cache.adapter'];
- }
- /**
- * Create a class using an array of constructor arguments
- *
- * @param string $className Class name
- * @param array $args Arguments for the class constructor
- *
- * @return mixed
- * @throws RuntimeException
- * @deprecated
- * @codeCoverageIgnore
- */
- private static function createObject($className, array $args = null)
- {
- try {
- if (!$args) {
- return new $className;
- } else {
- $c = new \ReflectionClass($className);
- return $c->newInstanceArgs($args);
- }
- } catch (\Exception $e) {
- throw new RuntimeException($e->getMessage(), $e->getCode(), $e);
- }
- }
- }
|