Skip to content

Commit 5fcf729

Browse files
committed
Merge pull request #10 from SpacePossum/master_service_name_var
Service name as var.
2 parents 3959112 + 3d097b8 commit 5fcf729

File tree

4 files changed

+70
-8
lines changed

4 files changed

+70
-8
lines changed

README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,23 @@ $logger = $app['memcache']->getLogger();
7777

7878
// returns '$myPSR3Logger'
7979
$logger->getLogger();
80+
```
81+
## Custom name registering / multiple services
82+
83+
You can register the service using a name other than the default name `memcache`.
84+
The same method can be used to register multiple services on your application.
85+
Pass the name at the constructor of the service and use the same name as prefix for the configuration.
86+
For example:
87+
88+
```php
89+
90+
$app->register(new MemcachedServiceProvider('memcached'), array('memcached.prefix' => $prefix));
91+
$app->register(new MemcachedServiceProvider('cache2'), array('cache2.prefix' => $prefix));
92+
93+
// usage
94+
$app['memcached']->get('foo');
95+
$app['cache2']->get('bar');
96+
8097
```
8198

8299
### License

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"silex/silex": "~1.1"
1111
},
1212
"require-dev": {
13-
"gecko-packages/gecko-memcache-mock" : "1.0"
13+
"gecko-packages/gecko-memcache-mock" : "^2.0"
1414
},
1515
"autoload": {
1616
"psr-4": {

src/Caching/MemcachedServiceProvider.php

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,19 @@
2727
*/
2828
final class MemcachedServiceProvider implements ServiceProviderInterface
2929
{
30+
/**
31+
* @var string
32+
*/
33+
private $name;
34+
35+
/**
36+
* @param string $name
37+
*/
38+
public function __construct($name = 'memcache')
39+
{
40+
$this->name = $name;
41+
}
42+
3043
/**
3144
* {@inheritdoc}
3245
*/
@@ -40,9 +53,10 @@ public function boot(Application $app)
4053
*/
4154
public function register(Application $app)
4255
{
43-
$app['memcache'] = $app->share(
44-
function () use ($app) {
45-
$memcache = isset($app['memcache.client']) ? $app['memcache.client'] : 'memcached';
56+
$name = $this->name;
57+
$app[$name] = $app->share(
58+
function (Application $app) use ($name) {
59+
$memcache = isset($app[$name.'.client']) ? $app[$name.'.client'] : 'memcached';
4660
switch ($memcache) {
4761
case 'memcached':
4862
if (!class_exists('Memcached')) {
@@ -73,8 +87,8 @@ function () use ($app) {
7387
break;
7488
}
7589

76-
if (isset($app['memcache.servers'])) {
77-
foreach ($app['memcache.servers'] as $server) {
90+
if (isset($app[$name.'.servers'])) {
91+
foreach ($app[$name.'.servers'] as $server) {
7892
if (count($server) === 1) {
7993
$server[1] = 11211; // use default port
8094
}
@@ -85,8 +99,8 @@ function () use ($app) {
8599
$memcache->addServer('127.0.0.1', 11211);
86100
}
87101

88-
if (isset($app['memcache.prefix'])) {
89-
$memcache->setPrefix($app['memcache.prefix']);
102+
if (isset($app[$name.'.prefix']) && method_exists($memcache, 'setPrefix')) {
103+
$memcache->setPrefix($app[$name.'.prefix']);
90104
}
91105

92106
return $memcache;

tests/Caching/Tests/MemcachedServiceProviderTest.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,37 @@ public function testExceptionMissingCustomClient()
164164
$app['memcache']->getServerList();
165165
}
166166

167+
public function testServiceName()
168+
{
169+
$app = new Application();
170+
171+
$name1 = 'memcached';
172+
$prefix1 = 'prefix1';
173+
$service1 = new MemcachedServiceProvider($name1);
174+
$app->register($service1, array($name1.'.client' => 'mock', $name1.'.prefix' => $prefix1));
175+
176+
$name2 = 'cache';
177+
$prefix2 = 'prefix2';
178+
$service2 = new MemcachedServiceProvider($name2);
179+
$app->register($service2, array($name2.'.client' => 'mock', $name2.'.prefix' => $prefix2));
180+
181+
$this->assertFalse(isset($app['memcache']));
182+
183+
$this->assertTrue(isset($app[$name1]));
184+
$this->assertInstanceOf('GeckoPackages\MemcacheMock\MemcachedMock', $app[$name1]);
185+
186+
$this->assertTrue(isset($app[$name2]));
187+
$this->assertInstanceOf('GeckoPackages\MemcacheMock\MemcachedMock', $app[$name2]);
188+
189+
$app[$name1]->set('foo', 'bar');
190+
191+
$this->assertSame('bar', $app[$name1]->get('foo'));
192+
$this->assertFalse($app[$name2]->get('foo'));
193+
194+
$this->assertSame($prefix1, $app[$name1]->getPrefix());
195+
$this->assertSame($prefix2, $app[$name2]->getPrefix());
196+
}
197+
167198
private function runCacheTest(Application $app, $prefix)
168199
{
169200
$prefixReadBack = $app['memcache']->getOption(\Memcached::OPT_PREFIX_KEY);

0 commit comments

Comments
 (0)