Skip to content

Commit 302dbd1

Browse files
beberleifabpot
authored andcommitted
Refactor Doctrine Bundle to use Symfony DIC Enabled EventManager.
1 parent fa7fded commit 302dbd1

File tree

3 files changed

+35
-17
lines changed

3 files changed

+35
-17
lines changed

src/Symfony/Bundle/DoctrineBundle/DependencyInjection/DoctrineExtension.php

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,6 @@ protected function loadDbalConnection(array $connection, ContainerBuilder $conta
115115
$containerDef->addMethodCall('setSqlLogger', array(new Reference('doctrine.dbal.logger')));
116116
$container->setDefinition(sprintf('doctrine.dbal.%s_connection.configuration', $connection['name']), $containerDef);
117117

118-
$eventManagerDef = new Definition(isset($connection['event-manager-class']) ? $connection['event-manager-class'] : $connection['event_manager_class']);
119-
$container->setDefinition(sprintf('doctrine.dbal.%s_connection.event_manager', $connection['name']), $eventManagerDef);
120-
121118
$driverOptions = array();
122119
$driverDef = new Definition('Doctrine\DBAL\DriverManager');
123120
$driverDef->setFactoryMethod('getConnection');
@@ -147,6 +144,32 @@ protected function loadDbalConnection(array $connection, ContainerBuilder $conta
147144
}
148145
}
149146

147+
// event manager
148+
$eventManagerName = isset($connection['event_manager']) ? $connection['event_manager'] : $connection['name'];
149+
$eventManagerId = sprintf('doctrine.dbal.%s_connection.event_manager', $eventManagerName);
150+
if (!$container->hasDefinition($eventManagerId)) {
151+
$eventManagerDef = new Definition('%doctrine.dbal.event_manager_class%');
152+
$eventManagerDef->addMethodCall('loadTaggedEventListeners', array(
153+
new Reference('service_container'),
154+
));
155+
$eventManagerDef->addMethodCall('loadTaggedEventListeners', array(
156+
new Reference('service_container'),
157+
sprintf('doctrine.dbal.%s_event_listener', $eventManagerName),
158+
));
159+
$eventManagerDef->addMethodCall('loadTaggedEventSubscribers', array(
160+
new Reference('service_container'),
161+
));
162+
$eventManagerDef->addMethodCall('loadTaggedEventSubscribers', array(
163+
new Reference('service_container'),
164+
sprintf('doctrine.dbal.%s_event_subscriber', $eventManagerName),
165+
));
166+
$container->setDefinition($eventManagerId, $eventManagerDef);
167+
}
168+
169+
if ($container->getParameter('doctrine.dbal.default_connection') == $connection['name']) {
170+
$container->setAlias('doctrine.dbal.event_manager', sprintf('doctrine.dbal.%s_connection.event_manager', $connection['name']));
171+
}
172+
150173
$driverDef->setArguments(array(
151174
$driverOptions,
152175
new Reference(sprintf('doctrine.dbal.%s_connection.configuration', $connection['name'])),
@@ -305,8 +328,10 @@ protected function loadOrmEntityManager(array $entityManager, ContainerBuilder $
305328
$entityManagerService = sprintf('doctrine.orm.%s_entity_manager', $entityManager['name']);
306329

307330
if (!$container->hasDefinition($entityManagerService) || isset($entityManager['connection'])) {
331+
$connectionName = isset($entityManager['connection']) ? $entityManager['connection'] : $entityManager['name'];
332+
308333
$ormEmArgs = array(
309-
new Reference(sprintf('doctrine.dbal.%s_connection', isset($entityManager['connection']) ? $entityManager['connection'] : $entityManager['name'])),
334+
new Reference(sprintf('doctrine.dbal.%s_connection', $connectionName)),
310335
new Reference(sprintf('doctrine.orm.%s_configuration', $entityManager['name']))
311336
);
312337
$ormEmDef = new Definition('%doctrine.orm.entity_manager_class%', $ormEmArgs);
@@ -320,6 +345,10 @@ protected function loadOrmEntityManager(array $entityManager, ContainerBuilder $
320345
sprintf('doctrine.orm.%s_entity_manager', $entityManager['name'])
321346
);
322347
}
348+
$container->setAlias(
349+
sprintf('doctrine.orm.%s_entity_manager.event_manager', $entityManager['name']),
350+
sprintf('doctrine.dbal.%s_connection.event_manager', $connectionName)
351+
);
323352
}
324353
}
325354

src/Symfony/Bundle/DoctrineBundle/Resources/config/dbal.xml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,5 @@
2525
<tag name="data_collector" template="DoctrineBundle:Collector:db" />
2626
<argument type="service" id="doctrine.dbal.logger" />
2727
</service>
28-
29-
<!-- events -->
30-
<service id="doctrine.dbal.event_manager" class="%doctrine.dbal.event_manager_class%">
31-
<call method="loadTaggedEventListeners">
32-
<argument type="service" id="service_container" />
33-
<argument>doctrine.dbal.event_listener</argument>
34-
</call>
35-
<call method="loadTaggedEventSubscribers">
36-
<argument type="service" id="service_container" />
37-
<argument>doctrine.dbal.event_listener</argument>
38-
</call>
39-
</service>
4028
</services>
4129
</container>

src/Symfony/Bundle/DoctrineBundle/Tests/ContainerTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function testContainer()
4949
$this->assertInstanceOf('Doctrine\DBAL\Logging\DebugStack', $container->get('doctrine.dbal.logger'));
5050
$this->assertInstanceOf('Symfony\Bundle\DoctrineBundle\DataCollector\DoctrineDataCollector', $container->get('doctrine.data_collector'));
5151
$this->assertInstanceOf('Doctrine\DBAL\Configuration', $container->get('doctrine.dbal.default_connection.configuration'));
52-
$this->assertInstanceOf('Doctrine\Common\EventManager', $container->get('doctrine.dbal.default_connection.event_manager'));
52+
$this->assertInstanceOf('Symfony\Bundle\DoctrineAbstractBundle\Event\EventManager', $container->get('doctrine.dbal.default_connection.event_manager'));
5353
$this->assertInstanceOf('Doctrine\DBAL\Connection', $container->get('doctrine.dbal.default_connection'));
5454
$this->assertInstanceOf('Doctrine\Common\Annotations\AnnotationReader', $container->get('doctrine.orm.metadata.annotation_reader'));
5555
$this->assertInstanceOf('Doctrine\ORM\Configuration', $container->get('doctrine.orm.default_configuration'));
@@ -60,6 +60,7 @@ public function testContainer()
6060
$this->assertInstanceOf('Doctrine\ORM\EntityManager', $container->get('doctrine.orm.default_entity_manager'));
6161
$this->assertInstanceOf('Doctrine\DBAL\Connection', $container->get('database_connection'));
6262
$this->assertInstanceOf('Doctrine\ORM\EntityManager', $container->get('doctrine.orm.entity_manager'));
63+
$this->assertInstanceOf('Symfony\Bundle\DoctrineAbstractBundle\Event\EventManager', $container->get('doctrine.orm.default_entity_manager.event_manager'));
6364
$this->assertInstanceOf('Symfony\Bundle\DoctrineAbstractBundle\Event\EventManager', $container->get('doctrine.dbal.event_manager'));
6465
}
6566
}

0 commit comments

Comments
 (0)