From 64a168d74999bade8adf6d3d74d4360f04717227 Mon Sep 17 00:00:00 2001 From: Oliver Mack Date: Thu, 6 Dec 2018 16:42:23 +0100 Subject: [PATCH] Added ability to customize the listener priorities by setting a numeric value in the config --- .../StofDoctrineExtensionsExtension.php | 8 +++- .../StofDoctrineExtensionsExtensionTest.php | 37 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/DependencyInjection/StofDoctrineExtensionsExtension.php b/DependencyInjection/StofDoctrineExtensionsExtension.php index 638b3eb3..7c14e218 100644 --- a/DependencyInjection/StofDoctrineExtensionsExtension.php +++ b/DependencyInjection/StofDoctrineExtensionsExtension.php @@ -106,8 +106,8 @@ private function processObjectManagerConfigurations(array $configs, ContainerBui ); foreach ($configs as $name => $listeners) { - foreach ($listeners as $ext => $enabled) { - if (!$enabled) { + foreach ($listeners as $ext => $settingValue) { + if (false === $settingValue) { continue; } @@ -122,6 +122,10 @@ private function processObjectManagerConfigurations(array $configs, ContainerBui $attributes['priority'] = $listenerPriorities[$ext]; } + if (is_numeric($settingValue)) { + $attributes['priority'] = $settingValue; + } + $definition = $container->getDefinition(sprintf('stof_doctrine_extensions.listener.%s', $ext)); $definition->addTag($doctrineSubscriberTag, $attributes); diff --git a/Tests/DependencyInjection/StofDoctrineExtensionsExtensionTest.php b/Tests/DependencyInjection/StofDoctrineExtensionsExtensionTest.php index 7ee16d39..50a65449 100644 --- a/Tests/DependencyInjection/StofDoctrineExtensionsExtensionTest.php +++ b/Tests/DependencyInjection/StofDoctrineExtensionsExtensionTest.php @@ -101,4 +101,41 @@ public function testLoadBothConfig($listener) $this->assertCount(1, $def->getTag('doctrine.event_subscriber')); $this->assertCount(1, $def->getTag('doctrine_mongodb.odm.event_subscriber')); } + + public function testConfigWithCustomListenerPriorities() + { + $extension = new StofDoctrineExtensionsExtension(); + $container = new ContainerBuilder(); + + $config = array( + 'orm' => array('default' => array( + 'blameable' => 0, + 'loggable' => -1, + 'uploadable' => true, + 'sortable' => false, + )), + 'mongodb' => array('default' => array( + 'blameable' => 0, + 'loggable' => -1, + 'uploadable' => true, + 'sortable' => false, + )), + ); + + $extension->load(array($config), $container); + + $def = $container->getDefinition('stof_doctrine_extensions.listener.blameable'); + $this->assertTrue($def->hasTag('doctrine.event_subscriber')); + $this->assertArraySubset(array(array('priority' => 0)), $def->getTag('doctrine.event_subscriber')); + + $def = $container->getDefinition('stof_doctrine_extensions.listener.loggable'); + $this->assertTrue($def->hasTag('doctrine.event_subscriber')); + $this->assertArraySubset(array(array('priority' => -1)), $def->getTag('doctrine.event_subscriber')); + + $def = $container->getDefinition('stof_doctrine_extensions.listener.uploadable'); + $this->assertTrue($def->hasTag('doctrine.event_subscriber')); + $this->assertArraySubset(array(array('priority' => -5)), $def->getTag('doctrine.event_subscriber')); + + $this->assertFalse($container->hasDefinition('stof_doctrine_extensions.listener.sortable')); + } }