Skip to content

Commit 05d62ec

Browse files
committed
fixes #700: Psr16Adapter::deleteMultiple converts $keys to an array.
The internal Psr\Cache\CacheItemPoolInterface::deleteItems requires an array as argument. Some popular tools like PhpSpreadsheet use a Traversable instead.
1 parent 347a04b commit 05d62ec

File tree

2 files changed

+39
-14
lines changed

2 files changed

+39
-14
lines changed

lib/Phpfastcache/Helper/Psr16Adapter.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,13 @@ public function setMultiple($values, $ttl = null): bool
175175
public function deleteMultiple($keys): bool
176176
{
177177
try {
178-
return $this->internalCacheInstance->deleteItems($keys);
178+
if ($keys instanceof \Traversable) {
179+
return $this->internalCacheInstance->deleteItems(\iterator_to_array($keys));
180+
} elseif (is_array($keys)) {
181+
return $this->internalCacheInstance->deleteItems($keys);
182+
} else {
183+
throw new phpFastCacheInvalidArgumentException('$keys must be an array/Traversable instance.');
184+
}
179185
} catch (PhpfastcacheInvalidArgumentException $e) {
180186
throw new PhpfastcacheSimpleCacheException($e->getMessage(), 0, $e);
181187
}

tests/Psr16Adapter.test.php

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,27 +18,27 @@
1818
$value = str_shuffle(uniqid('pfc', true));
1919

2020
if(!$Psr16Adapter->has('test-key')){
21-
$testHelper->printPassText('1/6 Psr16 hasser returned expected boolean (false)');
21+
$testHelper->printPassText('1/7 Psr16 hasser returned expected boolean (false)');
2222
}else{
23-
$testHelper->printFailText('1/6 Psr16 hasser returned unexpected boolean (true)');
23+
$testHelper->printFailText('1/7 Psr16 hasser returned unexpected boolean (true)');
2424
}
2525

2626
$testHelper->printNewLine()->printText('Setting up value to "test-key"...')->printNewLine();
2727
$Psr16Adapter->set('test-key', $value);
2828

2929
if($Psr16Adapter->get('test-key') === $value){
30-
$testHelper->printPassText('2/6 Psr16 getter returned expected value: ' . $value);
30+
$testHelper->printPassText('2/7 Psr16 getter returned expected value: ' . $value);
3131
}else{
32-
$testHelper->printFailText('2/6 Psr16 getter returned unexpected value: ' . $value);
32+
$testHelper->printFailText('2/7 Psr16 getter returned unexpected value: ' . $value);
3333
}
3434

3535
$testHelper->printNewLine()->printText('Deleting key "test-key"...')->printNewLine();
3636
$Psr16Adapter->delete('test-key');
3737

3838
if(!$Psr16Adapter->has('test-key')){
39-
$testHelper->printPassText('3/6 Psr16 hasser returned expected boolean (false)');
39+
$testHelper->printPassText('3/7 Psr16 hasser returned expected boolean (false)');
4040
}else{
41-
$testHelper->printFailText('3/6 Psr16 hasser returned unexpected boolean (true)');
41+
$testHelper->printFailText('3/7 Psr16 hasser returned unexpected boolean (true)');
4242
}
4343

4444
$testHelper->printNewLine()->printText('Setting up value to "test-key, test-key2, test-key3"...')->printNewLine();
@@ -51,9 +51,9 @@
5151

5252
$values = $Psr16Adapter->getMultiple(['test-key', 'test-key2', 'test-key3']);
5353
if(count(array_filter($values)) === 3){
54-
$testHelper->printPassText('4/6 Psr16 multiple getters returned expected values (3)');
54+
$testHelper->printPassText('4/7 Psr16 multiple getters returned expected values (3)');
5555
}else{
56-
$testHelper->printFailText('4/6 Psr16 getters(3) returned unexpected values.');
56+
$testHelper->printFailText('4/7 Psr16 getters(3) returned unexpected values.');
5757
}
5858

5959
$testHelper->printNewLine()->printText('Clearing whole cache ...')->printNewLine();
@@ -67,18 +67,37 @@
6767
]);
6868

6969
if($Psr16Adapter->has('test-key') && $Psr16Adapter->has('test-key2') && $Psr16Adapter->has('test-key3')){
70-
$testHelper->printPassText('5/6 Psr16 hasser returned expected booleans (true)');
70+
$testHelper->printPassText('5/7 Psr16 hasser returned expected booleans (true)');
7171
}else{
72-
$testHelper->printFailText('5/6 Psr16 hasser returned one or more unexpected boolean (false)');
72+
$testHelper->printFailText('5/7 Psr16 hasser returned one or more unexpected boolean (false)');
7373
}
7474

7575
$testHelper->printNewLine()->printText('Deleting up keys "test-key, test-key2, test-key3"...')->printNewLine();
7676
$Psr16Adapter->deleteMultiple(['test-key', 'test-key2', 'test-key3']);
7777

7878
if(!$Psr16Adapter->has('test-key') && !$Psr16Adapter->has('test-key2') && !$Psr16Adapter->has('test-key3')){
79-
$testHelper->printPassText('6/6 Psr16 hasser returned expected booleans (false)');
79+
$testHelper->printPassText('6/7 Psr16 hasser returned expected booleans (false)');
8080
}else{
81-
$testHelper->printFailText('6/6 Psr16 hasser returned one or more unexpected boolean (true)');
81+
$testHelper->printFailText('6/7 Psr16 hasser returned one or more unexpected boolean (true)');
8282
}
8383

84-
$testHelper->terminateTest();
84+
$testHelper->printNewLine()->printText('Clearing whole cache ...')->printNewLine();
85+
$Psr16Adapter->clear();
86+
$testHelper->printText('Setting up value to "test-key, test-key2, test-key3"...')->printNewLine();
87+
$Psr16Adapter->setMultiple([
88+
'test-key' => $value,
89+
'test-key2' => $value,
90+
'test-key3' => $value
91+
]);
92+
93+
$testHelper->printText('Deleting up keys "test-key, test-key2, test-key3"... from a Traversable')->printNewLine();
94+
$traversable = new ArrayObject(['test-key', 'test-key2', 'test-key3']);
95+
$Psr16Adapter->deleteMultiple($traversable);
96+
97+
if(!$Psr16Adapter->has('test-key') && !$Psr16Adapter->has('test-key2') && !$Psr16Adapter->has('test-key3')){
98+
$testHelper->printPassText('7/7 Psr16 hasser returned expected booleans (false)');
99+
}else{
100+
$testHelper->printFailText('7/7 Psr16 hasser returned one or more unexpected boolean (true)');
101+
}
102+
103+
$testHelper->terminateTest();

0 commit comments

Comments
 (0)