Skip to content

Commit fa459b6

Browse files
committed
Define your own EventManager with doctrine.managers.[manager].event_manager
Fixes #408
1 parent 09c17fb commit fa459b6

File tree

2 files changed

+73
-1
lines changed

2 files changed

+73
-1
lines changed

src/EntityManagerFactory.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace LaravelDoctrine\ORM;
44

55
use Doctrine\Common\Cache\Cache;
6+
use Doctrine\Common\EventManager;
67
use Doctrine\ORM\Cache\DefaultCacheFactory;
78
use Doctrine\ORM\Configuration;
89
use Doctrine\ORM\EntityManager;
@@ -104,6 +105,8 @@ public function create(array $settings = [])
104105

105106
$this->setMetadataDriver($settings, $configuration);
106107

108+
$eventManager = $this->createEventManager($settings);
109+
107110
$driver = $this->getConnectionDriver($settings);
108111

109112
$connection = $this->connection->driver(
@@ -133,7 +136,8 @@ public function create(array $settings = [])
133136

134137
$manager = EntityManager::create(
135138
$connection,
136-
$configuration
139+
$configuration,
140+
$eventManager
137141
);
138142

139143
$manager = $this->decorateManager($settings, $manager);
@@ -460,6 +464,24 @@ protected function registerMappingTypes(array $settings = [], EntityManagerInter
460464
}
461465
}
462466

467+
/**
468+
* @param array $settings
469+
*
470+
* @return null|EventManager
471+
*
472+
* @throws \Illuminate\Contracts\Container\BindingResolutionException
473+
*/
474+
private function createEventManager(array $settings = [])
475+
{
476+
$customEventManager = Arr::get($settings, 'event_manager');
477+
478+
if (!$customEventManager) {
479+
return null;
480+
}
481+
482+
return $this->container->make($customEventManager);
483+
}
484+
463485
/**
464486
* Check if master slave connection was being configured.
465487
*

tests/EntityManagerFactoryTest.php

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,52 @@ public function test_wrapper_connection()
528528
$this->assertInstanceOf(FakeConnection::class, $manager->getConnection());
529529
}
530530

531+
public function test_custom_event_manager()
532+
{
533+
m::resetContainer();
534+
535+
$config = new ConfigRepository([
536+
'database.connections.mysql' => [
537+
'driver' => 'mysql'
538+
],
539+
'doctrine' => [
540+
'meta' => 'annotations',
541+
'connection' => 'mysql',
542+
'paths' => ['Entities'],
543+
'proxies' => [
544+
'path' => 'dir',
545+
'auto_generate' => false,
546+
'namespace' => 'namespace'
547+
],
548+
'event_manager' => 'my_event_manager'
549+
],
550+
'doctrine.custom_datetime_functions' => [],
551+
'doctrine.custom_numeric_functions' => [],
552+
'doctrine.custom_string_functions' => []
553+
]);
554+
555+
$container = new \Illuminate\Container\Container();
556+
$container->singleton(Repository::class, function () use ($config) {
557+
return $config;
558+
});
559+
560+
$container->alias(FakeEventManager::class, 'my_event_manager');
561+
562+
$factory = new EntityManagerFactory(
563+
$container,
564+
new Setup(),
565+
new MetaDataManager($container),
566+
new ConnectionManager($container),
567+
new CacheManager($container),
568+
$config,
569+
new EntityListenerResolver($container)
570+
);
571+
572+
$manager = $factory->create($config->get('doctrine'));
573+
574+
$this->assertInstanceOf(FakeEventManager::class, $manager->getEventManager());
575+
}
576+
531577
/**
532578
* MOCKS
533579
*
@@ -917,6 +963,10 @@ private function getDummyBaseInputConfig()
917963
}
918964
}
919965

966+
class FakeEventManager extends \Doctrine\Common\EventManager
967+
{
968+
}
969+
920970
class FakeConnection extends Connection
921971
{
922972
}

0 commit comments

Comments
 (0)