Skip to content

Commit a886daf

Browse files
authored
Allow installing doctrine/cache 2.0 (#2226)
* Allow installing doctrine/cache 2.0 * Make doctrine/cache a dev dependency
1 parent 0d673a2 commit a886daf

File tree

5 files changed

+45
-13
lines changed

5 files changed

+45
-13
lines changed

composer.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@
3636
"require": {
3737
"php": "^7.2 || ^8.0",
3838
"behat/transliterator": "~1.2",
39-
"doctrine/annotations": "^1.2",
40-
"doctrine/cache": "^1.0",
39+
"doctrine/annotations": "^1.13",
4140
"doctrine/collections": "^1.0",
4241
"doctrine/common": "^2.13 || ^3.0",
4342
"doctrine/event-manager": "^1.0"
@@ -47,11 +46,13 @@
4746
},
4847
"require-dev": {
4948
"alcaeus/mongo-php-adapter": "^1.1",
49+
"doctrine/cache": "^1.11 || ^2.0",
5050
"doctrine/doctrine-bundle": "^2.3",
5151
"doctrine/mongodb-odm": "^2.0",
5252
"doctrine/orm": "^2.6.3",
5353
"friendsofphp/php-cs-fixer": "^2.16",
5454
"phpunit/phpunit": "^8.5",
55+
"symfony/cache": "^4.4 || ^5.0",
5556
"symfony/yaml": "^4.1"
5657
},
5758
"conflict": {
@@ -61,7 +62,8 @@
6162
},
6263
"suggest": {
6364
"doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM",
64-
"doctrine/orm": "to use the extensions with the ORM"
65+
"doctrine/orm": "to use the extensions with the ORM",
66+
"symfony/cache": "to cache parsed annotations"
6567
},
6668
"config": {
6769
"bin-dir": "bin",

src/DoctrineExtensions.php

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44

55
use Doctrine\Common\Annotations\AnnotationReader;
66
use Doctrine\Common\Annotations\AnnotationRegistry;
7-
use Doctrine\Common\Annotations\CachedReader;
7+
use Doctrine\Common\Annotations\PsrCachedReader;
88
use Doctrine\Common\Annotations\Reader;
99
use Doctrine\Common\Cache\ArrayCache;
10+
use Doctrine\Common\Cache\Psr6\CacheAdapter;
1011
use Doctrine\ODM\MongoDB\Mapping\Driver as DriverMongodbODM;
1112
use Doctrine\ORM\Mapping\Driver as DriverORM;
1213
use Doctrine\Persistence\Mapping\Driver\MappingDriverChain;
14+
use Symfony\Component\Cache\Adapter\ArrayAdapter;
15+
use function class_exists;
1316

1417
/**
1518
* Version class allows to checking the dependencies required
@@ -33,7 +36,7 @@ public static function registerMappingIntoDriverChainORM(MappingDriverChain $dri
3336
{
3437
self::registerAnnotations();
3538
if (!$reader) {
36-
$reader = new CachedReader(new AnnotationReader(), new ArrayCache());
39+
$reader = self::createAnnotationReader();
3740
}
3841
$annotationDriver = new DriverORM\AnnotationDriver($reader, [
3942
__DIR__.'/Translatable/Entity',
@@ -51,7 +54,7 @@ public static function registerAbstractMappingIntoDriverChainORM(MappingDriverCh
5154
{
5255
self::registerAnnotations();
5356
if (!$reader) {
54-
$reader = new CachedReader(new AnnotationReader(), new ArrayCache());
57+
$reader = self::createAnnotationReader();
5558
}
5659
$annotationDriver = new DriverORM\AnnotationDriver($reader, [
5760
__DIR__.'/Translatable/Entity/MappedSuperclass',
@@ -69,7 +72,7 @@ public static function registerMappingIntoDriverChainMongodbODM(MappingDriverCha
6972
{
7073
self::registerAnnotations();
7174
if (!$reader) {
72-
$reader = new CachedReader(new AnnotationReader(), new ArrayCache());
75+
$reader = self::createAnnotationReader();
7376
}
7477
$annotationDriver = new DriverMongodbODM\AnnotationDriver($reader, [
7578
__DIR__.'/Translatable/Document',
@@ -86,7 +89,7 @@ public static function registerAbstractMappingIntoDriverChainMongodbODM(MappingD
8689
{
8790
self::registerAnnotations();
8891
if (!$reader) {
89-
$reader = new CachedReader(new AnnotationReader(), new ArrayCache());
92+
$reader = self::createAnnotationReader();
9093
}
9194
$annotationDriver = new DriverMongodbODM\AnnotationDriver($reader, [
9295
__DIR__.'/Translatable/Document/MappedSuperclass',
@@ -102,4 +105,17 @@ public static function registerAnnotations()
102105
{
103106
AnnotationRegistry::registerFile(__DIR__.'/Mapping/Annotation/All.php');
104107
}
108+
109+
private static function createAnnotationReader()
110+
{
111+
$reader = new AnnotationReader();
112+
113+
if (class_exists(ArrayAdapter::class)) {
114+
$reader = new PsrCachedReader($reader, new ArrayAdapter());
115+
} elseif (class_exists(ArrayCache::class)) {
116+
$reader = new PsrCachedReader($reader, CacheAdapter::wrap(new ArrayCache()));
117+
}
118+
119+
return $reader;
120+
}
105121
}

src/Mapping/MappedEventSubscriber.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44

55
use Doctrine\Common\Annotations\AnnotationReader;
66
use Doctrine\Common\Annotations\AnnotationRegistry;
7-
use Doctrine\Common\Annotations\CachedReader;
7+
use Doctrine\Common\Annotations\PsrCachedReader;
88
use Doctrine\Common\Annotations\Reader;
99
use Doctrine\Common\Cache\ArrayCache;
10+
use Doctrine\Common\Cache\Psr6\CacheAdapter;
1011
use Doctrine\Common\EventArgs;
1112
use Doctrine\Common\EventSubscriber;
1213
use Doctrine\Persistence\ObjectManager;
1314
use Gedmo\Mapping\Event\AdapterInterface;
15+
use Symfony\Component\Cache\Adapter\ArrayAdapter;
16+
use function class_exists;
1417

1518
/**
1619
* This is extension of event subscriber class and is
@@ -224,7 +227,13 @@ private function getDefaultAnnotationReader()
224227
if (null === self::$defaultAnnotationReader) {
225228
AnnotationRegistry::registerAutoloadNamespace('Gedmo\\Mapping\\Annotation', __DIR__.'/../../');
226229

227-
$reader = new CachedReader(new AnnotationReader(), new ArrayCache());
230+
$reader = new AnnotationReader();
231+
232+
if (class_exists(ArrayAdapter::class)) {
233+
$reader = new PsrCachedReader($reader, new ArrayAdapter());
234+
} else if (class_exists(ArrayCache::class)) {
235+
$reader = new PsrCachedReader($reader, CacheAdapter::wrap(new ArrayCache()));
236+
}
228237

229238
self::$defaultAnnotationReader = $reader;
230239
}

tests/Gedmo/SoftDeleteable/SoftDeleteableEntityTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use SoftDeleteable\Fixture\Entity\User;
1515
use SoftDeleteable\Fixture\Entity\UserNoHardDelete;
1616
use Tool\BaseTestCaseORM;
17+
use function class_exists;
1718

1819
/**
1920
* These are tests for SoftDeleteable behavior
@@ -483,6 +484,10 @@ public function testSoftDeleteableFilter()
483484
*/
484485
public function shouldFilterBeQueryCachedCorrectlyWhenToggledForEntity()
485486
{
487+
if (!class_exists(ArrayCache::class)) {
488+
$this->markTestSkipped('Test only applies when doctrine/cache 1.x is installed');
489+
}
490+
486491
$cache = new ArrayCache();
487492
$this->em->getConfiguration()->setQueryCacheImpl($cache);
488493

tests/bootstrap.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
use Composer\Autoload\ClassLoader;
44
use Doctrine\Common\Annotations\AnnotationReader;
55
use Doctrine\Common\Annotations\AnnotationRegistry;
6-
use Doctrine\Common\Annotations\CachedReader;
7-
use Doctrine\Common\Cache\ArrayCache;
6+
use Doctrine\Common\Annotations\PsrCachedReader;
7+
use Symfony\Component\Cache\Adapter\ArrayAdapter;
88

99
/*
1010
* This is bootstrap for phpUnit unit tests,
@@ -48,5 +48,5 @@
4848
Gedmo\DoctrineExtensions::registerAnnotations();
4949

5050
$reader = new AnnotationReader();
51-
$reader = new CachedReader($reader, new ArrayCache());
51+
$reader = new PsrCachedReader($reader, new ArrayAdapter());
5252
$_ENV['annotation_reader'] = $reader;

0 commit comments

Comments
 (0)