From 4b867577067651d5742a3d2fa77dc01478d40ca2 Mon Sep 17 00:00:00 2001 From: Joni Halme Date: Tue, 31 Mar 2020 20:28:05 +0300 Subject: [PATCH] [Lock] Fix StoreFactory to accept same DSN syntax as AbstractAdapter --- Store/StoreFactory.php | 8 ++++---- Tests/Store/StoreFactoryTest.php | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Store/StoreFactory.php b/Store/StoreFactory.php index b9a5c1e..2e9172f 100644 --- a/Store/StoreFactory.php +++ b/Store/StoreFactory.php @@ -66,13 +66,13 @@ public static function createStore($connection) case 'semaphore' === $connection: return new SemaphoreStore(); - case 0 === strpos($connection, 'redis://'): - case 0 === strpos($connection, 'rediss://'): - case 0 === strpos($connection, 'memcached://'): + case 0 === strpos($connection, 'redis:'): + case 0 === strpos($connection, 'rediss:'): + case 0 === strpos($connection, 'memcached:'): if (!class_exists(AbstractAdapter::class)) { throw new InvalidArgumentException(sprintf('Unsupported DSN "%s". Try running "composer require symfony/cache".', $connection)); } - $storeClass = 0 === strpos($connection, 'memcached://') ? MemcachedStore::class : RedisStore::class; + $storeClass = 0 === strpos($connection, 'memcached:') ? MemcachedStore::class : RedisStore::class; $connection = AbstractAdapter::createConnection($connection, ['lazy' => true]); return new $storeClass($connection); diff --git a/Tests/Store/StoreFactoryTest.php b/Tests/Store/StoreFactoryTest.php index 1d88638..4e85cdc 100644 --- a/Tests/Store/StoreFactoryTest.php +++ b/Tests/Store/StoreFactoryTest.php @@ -58,12 +58,14 @@ public function validConnections() } if (class_exists(\Memcached::class) && class_exists(AbstractAdapter::class)) { yield ['memcached://server.com', MemcachedStore::class]; + yield ['memcached:?host[localhost]&host[localhost:12345]', MemcachedStore::class]; } - if (class_exists(\Redis::class) && class_exists(AbstractAdapter::class)) { + if ((class_exists(\Redis::class) || class_exists(\Predis\Client::class)) && class_exists(AbstractAdapter::class)) { yield ['redis://localhost', RedisStore::class]; yield ['redis://localhost?lazy=1', RedisStore::class]; yield ['redis://localhost?redis_cluster=1', RedisStore::class]; yield ['redis://localhost?redis_cluster=1&lazy=1', RedisStore::class]; + yield ['redis:?host[localhost]&host[localhost:6379]&redis_cluster=1', RedisStore::class]; } if (class_exists(\PDO::class)) { yield ['sqlite:/tmp/sqlite.db', PdoStore::class];