Skip to content

Commit ef25659

Browse files
committed
Fix parent class events applying to child classes
1 parent 5e17d0a commit ef25659

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

src/EventRedirector.php

+15-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
namespace RandomState\LaravelDoctrineEntityEvents;
55

66

7+
use App\Identity\Entities\Organisation;
78
use Closure;
89
use Doctrine\Common\EventSubscriber;
910

@@ -37,7 +38,7 @@ public function __call($event, array $arguments)
3738
}
3839

3940
$entity = $eventArgs->getObject();
40-
$redirects = $this->redirects[get_class($entity)] ?? false;
41+
$redirects = $this->getRedirectsForClass(get_class($entity)); //$this->redirects[get_class($entity)] ?? false;
4142

4243
if($redirects) {
4344
foreach($redirects as $redirect) {
@@ -47,6 +48,19 @@ public function __call($event, array $arguments)
4748
}
4849
}
4950

51+
public function getRedirectsForClass($class)
52+
{
53+
$redirects = $this->redirects[$class] ?? [];
54+
55+
$parent = get_parent_class($class);
56+
57+
if(!$parent) {
58+
return $redirects;
59+
}
60+
61+
return array_merge($redirects, $this->getRedirectsForClass($parent));
62+
}
63+
5064
/**
5165
* @param $entityClass
5266
* @param Redirect $redirect

src/LaravelDoctrineEntityEventsServiceProvider.php

+6-6
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@ class LaravelDoctrineEntityEventsServiceProvider extends ServiceProvider
1414
public function register()
1515
{
1616
$this->app->resolving(EventRedirector::class, function(EventRedirector $redirector) {
17-
if($onBoot = EventRedirector::$onBoot) {
18-
$onBoot($redirector);
19-
}
17+
if($onBoot = EventRedirector::$onBoot) {
18+
$onBoot($redirector);
19+
}
2020

21-
return $redirector;
21+
return $redirector;
2222
});
2323

2424
$this->app->resolving(EntityManagerInterface::class, function(EntityManagerInterface $entityManager) {
25-
$entityManager->getEventManager()->addEventSubscriber($this->app->make(EventRedirector::class));
26-
return $entityManager;
25+
$entityManager->getEventManager()->addEventSubscriber($this->app->make(EventRedirector::class));
26+
return $entityManager;
2727
});
2828
}
2929
}

tests/Feature/TriggerLaravelEventTest.php

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66

77
use Doctrine\Common\EventManager;
8-
use Doctrine\ORM\EntityManager;
98
use Doctrine\ORM\EntityManagerInterface;
109
use Doctrine\ORM\Event\LifecycleEventArgs;
1110
use Illuminate\Support\Facades\Event;

0 commit comments

Comments
 (0)