浏览代码

Accept the 'scheme' argument for Predis\ConnectionParameters. The 'redis' scheme is now an alias of 'tcp' for compatibility with older versions of Predis.

Daniele Alessandri 15 年之前
父节点
当前提交
a2c9cb38a5
共有 1 个文件被更改,包括 16 次插入2 次删除
  1. 16 2
      lib/Predis.php

+ 16 - 2
lib/Predis.php

@@ -986,6 +986,7 @@ class PubSubContext implements \Iterator {
 /* ------------------------------------------------------------------------- */
 /* ------------------------------------------------------------------------- */
 
 
 class ConnectionParameters {
 class ConnectionParameters {
+    const DEFAULT_SCHEME = 'tcp';
     const DEFAULT_HOST = '127.0.0.1';
     const DEFAULT_HOST = '127.0.0.1';
     const DEFAULT_PORT = 6379;
     const DEFAULT_PORT = 6379;
     const DEFAULT_TIMEOUT = 5;
     const DEFAULT_TIMEOUT = 5;
@@ -1001,7 +1002,7 @@ class ConnectionParameters {
     private static function parseURI($uri) {
     private static function parseURI($uri) {
         $parsed = @parse_url($uri);
         $parsed = @parse_url($uri);
 
 
-        if ($parsed == false || $parsed['scheme'] != 'redis' || $parsed['host'] == null) {
+        if ($parsed == false || $parsed['host'] == null) {
             throw new ClientException("Invalid URI: $uri");
             throw new ClientException("Invalid URI: $uri");
         }
         }
 
 
@@ -1047,7 +1048,13 @@ class ConnectionParameters {
     }
     }
 
 
     private static function filterConnectionParams($parameters) {
     private static function filterConnectionParams($parameters) {
+        // for compatibility with older versions of Predis
+        if (isset($parameters['scheme']) && $parameters['scheme'] === 'redis') {
+            $parameters['scheme'] = 'tcp';
+        }
+
         return array(
         return array(
+            'scheme' => self::getParamOrDefault($parameters, 'scheme', self::DEFAULT_SCHEME), 
             'host' => self::getParamOrDefault($parameters, 'host', self::DEFAULT_HOST), 
             'host' => self::getParamOrDefault($parameters, 'host', self::DEFAULT_HOST), 
             'port' => (int) self::getParamOrDefault($parameters, 'port', self::DEFAULT_PORT), 
             'port' => (int) self::getParamOrDefault($parameters, 'port', self::DEFAULT_PORT), 
             'database' => self::getParamOrDefault($parameters, 'database'), 
             'database' => self::getParamOrDefault($parameters, 'database'), 
@@ -1087,7 +1094,7 @@ class TcpConnection implements IConnectionSingle {
     private $_params, $_socket, $_initCmds, $_reader;
     private $_params, $_socket, $_initCmds, $_reader;
 
 
     public function __construct(ConnectionParameters $parameters, ResponseReader $reader = null) {
     public function __construct(ConnectionParameters $parameters, ResponseReader $reader = null) {
-        $this->_params   = $parameters;
+        $this->_params   = $this->checkParameters($parameters);
         $this->_initCmds = array();
         $this->_initCmds = array();
         $this->_reader   = $reader ?: new ResponseReader();
         $this->_reader   = $reader ?: new ResponseReader();
     }
     }
@@ -1098,6 +1105,13 @@ class TcpConnection implements IConnectionSingle {
         }
         }
     }
     }
 
 
+    private function checkParameters(ConnectionParameters $parameters) {
+        if ($parameters->scheme != 'tcp') {
+            throw new \InvalidArgumentException("Invalid scheme: {$parameters->scheme}");
+        }
+        return $parameters;
+    }
+
     public function isConnected() {
     public function isConnected() {
         return is_resource($this->_socket);
         return is_resource($this->_socket);
     }
     }