Skip to content

Commit a2a43a1

Browse files
Register Gedmo on Fluent driver
1 parent c9edcee commit a2a43a1

File tree

1 file changed

+81
-15
lines changed

1 file changed

+81
-15
lines changed

src/GedmoExtensionsServiceProvider.php

Lines changed: 81 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,15 @@
33
namespace LaravelDoctrine\Extensions;
44

55
use Doctrine\Common\Annotations\Reader;
6+
use Doctrine\Common\Persistence\Mapping\Driver\MappingDriver;
67
use Doctrine\ORM\Configuration;
8+
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
79
use Gedmo\DoctrineExtensions;
810
use Illuminate\Support\ServiceProvider;
11+
use LaravelDoctrine\Fluent\Extensions\GedmoExtensions;
12+
use LaravelDoctrine\Fluent\FluentDriver;
913
use LaravelDoctrine\ORM\DoctrineManager;
14+
use Doctrine\Common\Persistence\Mapping\Driver\MappingDriverChain;
1015

1116
class GedmoExtensionsServiceProvider extends ServiceProvider
1217
{
@@ -20,23 +25,84 @@ public function register()
2025

2126
$this->app->make(DoctrineManager::class)->extendAll(function (Configuration $configuration) {
2227

23-
$chain = $configuration->getMetadataDriverImpl();
24-
$reader = $chain->getReader();
25-
26-
if ($reader instanceof Reader) {
27-
if ($this->app->make('config')->get('doctrine.gedmo.all_mappings', false)) {
28-
DoctrineExtensions::registerMappingIntoDriverChainORM(
29-
$chain,
30-
$reader
31-
);
32-
} else {
33-
DoctrineExtensions::registerAbstractMappingIntoDriverChainORM(
34-
$chain,
35-
$reader
36-
);
37-
}
28+
$chain = $configuration->getMetadataDriverImpl();
29+
30+
if ($this->hasAnnotationReader($chain)) {
31+
$this->registerGedmoForAnnotations($chain);
32+
}
33+
34+
if ($this->hasFluentDriver($chain)) {
35+
$this->registerGedmoForFluent($chain);
3836
}
3937
});
4038
});
4139
}
40+
41+
/**
42+
* @param MappingDriverChain $driver
43+
* @return bool
44+
*/
45+
private function hasAnnotationReader(MappingDriverChain $driver)
46+
{
47+
foreach ($driver->getDrivers() as $driver) {
48+
if ($driver instanceof AnnotationDriver) {
49+
return true;
50+
}
51+
}
52+
53+
return false;
54+
}
55+
56+
/**
57+
* @param MappingDriverChain $driver
58+
* @return bool
59+
*/
60+
private function hasFluentDriver(MappingDriverChain $driver)
61+
{
62+
foreach ($driver->getDrivers() as $driver) {
63+
if ($driver instanceof FluentDriver) {
64+
return true;
65+
}
66+
}
67+
68+
return false;
69+
}
70+
71+
/**
72+
* @param $chain
73+
*/
74+
private function registerGedmoForAnnotations(MappingDriverChain $chain)
75+
{
76+
if ($this->needsAllMappings()) {
77+
DoctrineExtensions::registerMappingIntoDriverChainORM(
78+
$chain,
79+
$chain->getReader()
80+
);
81+
} else {
82+
DoctrineExtensions::registerAbstractMappingIntoDriverChainORM(
83+
$chain,
84+
$chain->getReader()
85+
);
86+
}
87+
}
88+
89+
/**
90+
* @param MappingDriverChain $chain
91+
*/
92+
private function registerGedmoForFluent(MappingDriverChain $chain)
93+
{
94+
if ($this->needsAllMappings()) {
95+
GedmoExtensions::registerAll($chain);
96+
} else {
97+
GedmoExtensions::registerAbstract($chain);
98+
}
99+
}
100+
101+
/**
102+
* @return mixed
103+
*/
104+
private function needsAllMappings()
105+
{
106+
return $this->app->make('config')->get('doctrine.gedmo.all_mappings', false) === true;
107+
}
42108
}

0 commit comments

Comments
 (0)