Skip to content

Commit a7ce2af

Browse files
committed
Merge branch '4.4'
* 4.4: [HttpFoundation][FrameworkBundle] allow configuring the session handler with a DSN [Validator] Add AutoMapping constraint to enable or disable auto-validation [DI] Fix "!tagged" related upgrade/changelog notes
2 parents 36d8af3 + ae7a0b8 commit a7ce2af

File tree

1 file changed

+48
-32
lines changed

1 file changed

+48
-32
lines changed

Store/StoreFactory.php

Lines changed: 48 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\Lock\Store;
1313

14+
use Doctrine\DBAL\Connection;
1415
use Symfony\Component\Cache\Adapter\AbstractAdapter;
1516
use Symfony\Component\Cache\Traits\RedisClusterProxy;
1617
use Symfony\Component\Cache\Traits\RedisProxy;
@@ -25,59 +26,74 @@
2526
class StoreFactory
2627
{
2728
/**
28-
* @param \Redis|\RedisArray|\RedisCluster|\Predis\ClientInterface|\Memcached|\Zookeeper|string $connection Connection or DSN or Store short name
29+
* @param \Redis|\RedisArray|\RedisCluster|\Predis\ClientInterface|RedisProxy|RedisClusterProxy|\Memcached|\PDO|Connection|\Zookeeper|string $connection Connection or DSN or Store short name
2930
*
3031
* @return PersistingStoreInterface
3132
*/
3233
public static function createStore($connection)
3334
{
34-
if (
35-
$connection instanceof \Redis ||
36-
$connection instanceof \RedisArray ||
37-
$connection instanceof \RedisCluster ||
38-
$connection instanceof \Predis\ClientInterface ||
39-
$connection instanceof RedisProxy ||
40-
$connection instanceof RedisClusterProxy
41-
) {
42-
return new RedisStore($connection);
43-
}
44-
if ($connection instanceof \Memcached) {
45-
return new MemcachedStore($connection);
46-
}
47-
if ($connection instanceof \Zookeeper) {
48-
return new ZookeeperStore($connection);
49-
}
50-
if (!\is_string($connection)) {
51-
throw new InvalidArgumentException(sprintf('Unsupported Connection: %s.', \get_class($connection)));
35+
if (!\is_string($connection) && !\is_object($connection)) {
36+
throw new \TypeError(sprintf('Argument 1 passed to %s() must be a string or a connection object, %s given.', __METHOD__, \gettype($connection)));
5237
}
5338

5439
switch (true) {
40+
case $connection instanceof \Redis:
41+
case $connection instanceof \RedisArray:
42+
case $connection instanceof \RedisCluster:
43+
case $connection instanceof \Predis\ClientInterface:
44+
case $connection instanceof RedisProxy:
45+
case $connection instanceof RedisClusterProxy:
46+
return new RedisStore($connection);
47+
48+
case $connection instanceof \Memcached:
49+
return new MemcachedStore($connection);
50+
51+
case $connection instanceof \PDO:
52+
case $connection instanceof Connection:
53+
return new PdoStore($connection);
54+
55+
case $connection instanceof \Zookeeper:
56+
return new ZookeeperStore($connection);
57+
58+
case !\is_string($connection):
59+
throw new InvalidArgumentException(sprintf('Unsupported Connection: %s.', \get_class($connection)));
5560
case 'flock' === $connection:
5661
return new FlockStore();
62+
5763
case 0 === strpos($connection, 'flock://'):
5864
return new FlockStore(substr($connection, 8));
65+
5966
case 'semaphore' === $connection:
6067
return new SemaphoreStore();
61-
case 0 === strpos($connection, 'redis://') && class_exists(AbstractAdapter::class):
62-
case 0 === strpos($connection, 'rediss://') && class_exists(AbstractAdapter::class):
63-
return new RedisStore(AbstractAdapter::createConnection($connection, ['lazy' => true]));
64-
case 0 === strpos($connection, 'memcached://') && class_exists(AbstractAdapter::class):
65-
return new MemcachedStore(AbstractAdapter::createConnection($connection, ['lazy' => true]));
66-
case 0 === strpos($connection, 'sqlite:'):
68+
69+
case 0 === strpos($connection, 'redis://'):
70+
case 0 === strpos($connection, 'rediss://'):
71+
case 0 === strpos($connection, 'memcached://'):
72+
if (!class_exists(AbstractAdapter::class)) {
73+
throw new InvalidArgumentException(sprintf('Unsupported DSN "%s". Try running "composer require symfony/cache".', $this->dsn));
74+
}
75+
$connection = AbstractAdapter::createConnection($connection, ['lazy' => true]);
76+
77+
return 0 === strpos($connection, 'memcached://') ? new MemcachedStore($connection) : new RedisStore($connection);
78+
79+
case 0 === strpos($connection, 'mssql://'):
6780
case 0 === strpos($connection, 'mysql:'):
68-
case 0 === strpos($connection, 'pgsql:'):
69-
case 0 === strpos($connection, 'oci:'):
70-
case 0 === strpos($connection, 'sqlsrv:'):
71-
case 0 === strpos($connection, 'sqlite3://'):
7281
case 0 === strpos($connection, 'mysql2://'):
82+
case 0 === strpos($connection, 'oci:'):
83+
case 0 === strpos($connection, 'oci8://'):
84+
case 0 === strpos($connection, 'pdo_oci://'):
85+
case 0 === strpos($connection, 'pgsql:'):
7386
case 0 === strpos($connection, 'postgres://'):
7487
case 0 === strpos($connection, 'postgresql://'):
75-
case 0 === strpos($connection, 'mssql://'):
88+
case 0 === strpos($connection, 'sqlsrv:'):
89+
case 0 === strpos($connection, 'sqlite:'):
90+
case 0 === strpos($connection, 'sqlite3://'):
7691
return new PdoStore($connection);
92+
7793
case 0 === strpos($connection, 'zookeeper://'):
7894
return new ZookeeperStore(ZookeeperStore::createConnection($connection));
79-
default:
80-
throw new InvalidArgumentException(sprintf('Unsupported Connection: %s.', $connection));
8195
}
96+
97+
throw new InvalidArgumentException(sprintf('Unsupported Connection: %s.', $connection));
8298
}
8399
}

0 commit comments

Comments
 (0)