Skip to content

Commit 4798e49

Browse files
feature #21108 [Cache] Add DSN, createClient & better error reporting to MemcachedAdapter (nicolas-grekas, robfrawley)
This PR was merged into the 3.3-dev branch. Discussion ---------- [Cache] Add DSN, createClient & better error reporting to MemcachedAdapter | Q | A | ------------- | --- | Branch? | master | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | - | License | MIT | Doc PR | symfony/symfony-docs#7265 Replaces #20863 ping @robfrawley: would you mind opening a doc PR for this? Commits ------- 87030b4 [cache] Add tests for MemcachedAdapter::createClient() e109438 [Cache] Add DSN, createClient & better error reporting to MemcachedAdapter
2 parents 70cf96e + 17c3900 commit 4798e49

File tree

8 files changed

+21
-6
lines changed

8 files changed

+21
-6
lines changed

DependencyInjection/Compiler/CachePoolPass.php

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

1212
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection\Compiler;
1313

14-
use Symfony\Component\Cache\Adapter\RedisAdapter;
14+
use Symfony\Component\Cache\Adapter\AbstractAdapter;
1515
use Symfony\Component\DependencyInjection\ChildDefinition;
1616
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
1717
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -108,13 +108,13 @@ public static function getServiceProvider(ContainerBuilder $container, $name)
108108
{
109109
$container->resolveEnvPlaceholders($name, null, $usedEnvs);
110110

111-
if (0 === strpos($name, 'redis://') || $usedEnvs) {
111+
if ($usedEnvs || preg_match('#^[a-z]++://#', $name)) {
112112
$dsn = $name;
113113

114114
if (!$container->hasDefinition($name = md5($dsn))) {
115-
$definition = new Definition(\Redis::class);
115+
$definition = new Definition(AbstractAdapter::class);
116116
$definition->setPublic(false);
117-
$definition->setFactory(array(RedisAdapter::class, 'createConnection'));
117+
$definition->setFactory(array(AbstractAdapter::class, 'createConnection'));
118118
$definition->setArguments(array($dsn));
119119
$container->setDefinition($name, $definition);
120120
}

DependencyInjection/Configuration.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -706,6 +706,7 @@ private function addCacheSection(ArrayNodeDefinition $rootNode)
706706
->scalarNode('default_doctrine_provider')->end()
707707
->scalarNode('default_psr6_provider')->end()
708708
->scalarNode('default_redis_provider')->defaultValue('redis://localhost')->end()
709+
->scalarNode('default_memcached_provider')->defaultValue('memcached://localhost')->end()
709710
->arrayNode('pools')
710711
->useAttributeAsKey('name')
711712
->prototype('array')

DependencyInjection/FrameworkExtension.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1256,7 +1256,7 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
12561256
// Inline any env vars referenced in the parameter
12571257
$container->setParameter('cache.prefix.seed', $container->resolveEnvPlaceholders($container->getParameter('cache.prefix.seed'), true));
12581258
}
1259-
foreach (array('doctrine', 'psr6', 'redis') as $name) {
1259+
foreach (array('doctrine', 'psr6', 'redis', 'memcached') as $name) {
12601260
if (isset($config[$name = 'default_'.$name.'_provider'])) {
12611261
$container->setAlias('cache.'.$name, new Alias(Compiler\CachePoolPass::getServiceProvider($container, $config[$name]), false));
12621262
}

Resources/config/cache.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,17 @@
9393
</call>
9494
</service>
9595

96+
<service id="cache.adapter.memcached" class="Symfony\Component\Cache\Adapter\MemcachedAdapter" abstract="true">
97+
<tag name="cache.pool" provider="cache.default_memcached_provider" clearer="cache.default_clearer" />
98+
<tag name="monolog.logger" channel="cache" />
99+
<argument /> <!-- Memcached connection service -->
100+
<argument /> <!-- namespace -->
101+
<argument>0</argument> <!-- default lifetime -->
102+
<call method="setLogger">
103+
<argument type="service" id="logger" on-invalid="ignore" />
104+
</call>
105+
</service>
106+
96107
<service id="cache.default_clearer" class="Symfony\Component\HttpKernel\CacheClearer\Psr6CacheClearer">
97108
<tag name="kernel.cache_clearer" />
98109
</service>

Resources/config/schema/symfony-1.0.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@
215215
<xsd:element name="default-doctrine-provider" type="xsd:string" minOccurs="0" maxOccurs="1" />
216216
<xsd:element name="default-psr6-provider" type="xsd:string" minOccurs="0" maxOccurs="1" />
217217
<xsd:element name="default-redis-provider" type="xsd:string" minOccurs="0" maxOccurs="1" />
218+
<xsd:element name="default-memcached-provider" type="xsd:string" minOccurs="0" maxOccurs="1" />
218219
<xsd:element name="pool" type="cache_pool" minOccurs="0" maxOccurs="unbounded" />
219220
</xsd:sequence>
220221
</xsd:complexType>

Tests/DependencyInjection/ConfigurationTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ protected static function getBundleDefaultConfig()
272272
'system' => 'cache.adapter.system',
273273
'directory' => '%kernel.cache_dir%/pools',
274274
'default_redis_provider' => 'redis://localhost',
275+
'default_memcached_provider' => 'memcached://localhost',
275276
),
276277
'workflows' => array(),
277278
'php_errors' => array(

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
],
1818
"require": {
1919
"php": ">=5.5.9",
20-
"symfony/cache": "~3.2",
20+
"symfony/cache": "~3.3",
2121
"symfony/class-loader": "~3.2",
2222
"symfony/dependency-injection": "~3.3",
2323
"symfony/config": "~2.8|~3.0",

phpunit.xml.dist

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
<php>
1010
<ini name="error_reporting" value="-1" />
1111
<env name="REDIS_HOST" value="localhost" />
12+
<env name="MEMCACHED_HOST" value="localhost" />
1213
</php>
1314

1415
<testsuites>

0 commit comments

Comments
 (0)