From 985d8b1e23ae71aa5a58e3d4868b61078a6633ed Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 4 Aug 2014 10:22:27 +0200 Subject: [PATCH 1/2] fixed the configuration --- DependencyInjection/Configuration.php | 96 +++++++++++++++++++-------- 1 file changed, 69 insertions(+), 27 deletions(-) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 5df5f7d..f1da62b 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -13,34 +13,37 @@ public function getConfigTreeBuilder() $rootNode = $treeBuilder->root('fervo_dispatch'); $rootNode + ->beforeNormalization() + ->ifTrue(function ($v) { return is_array($v) && !array_key_exists('backends', $v); }) + ->then(function ($v) { + $backend = array(); + + if (!isset($v['backend'])) { + //if not 'backend' or 'backends' are configured + $backend = array('type' => 'immediate'); + } else { + foreach ($v['backend'] as $key => $value) { + $backend[$key] = $v['backend'][$key]; + unset($v['backend'][$key]); + } + } + + $v['default_backend'] = isset($v['default_backend']) ? (string) $v['default_backend'] : 'default'; + $v['backends'] = array($v['default_backend'] => $backend); + + unset($v['backend']); + + return $v; + }) + + ->end() + ->validate() + ->ifTrue(function($v) { return !array_key_exists($v['default_backend'], $v['backends']); }) + ->thenInvalid('The configuration "default_backend" must be referring to the name of one of your backends.') + ->end() ->children() - ->arrayNode('backend')->addDefaultsIfNotSet() - ->children() - ->enumNode('type') - ->values(array('sidekiq', 'immediate', 'amqp')) - ->defaultValue('immediate') - ->end() - ->scalarNode('sidekiq_client_service')->end() - ->arrayNode('amqp_config')->addDefaultsIfNotSet() - ->children() - ->scalarNode('host')->defaultValue('localhost')->end() - ->integerNode('port')->defaultValue(5672)->end() - ->scalarNode('user')->defaultValue('guest')->end() - ->scalarNode('pass')->defaultValue('guest')->end() - ->scalarNode('vhost')->defaultValue('/')->end() - ->end() - ->end() - ->arrayNode('message_headers')->addDefaultsIfNotSet() - ->children() - ->scalarNode('php_bin')->defaultNull()->end() - ->scalarNode('console_path')->defaultNull()->end() - ->scalarNode('dispatch_path')->defaultNull()->end() - ->scalarNode('fastcgi_host')->cannotBeEmpty()->defaultValue('localhost')->end() - ->integerNode('fastcgi_port')->cannotBeEmpty()->defaultValue(9000)->end() - ->end() - ->end() - ->end() - ->end() + ->scalarNode('default_backend')->cannotBeEmpty()->defaultValue('default')->end() + ->append($this->getBackendsNode()) ->scalarNode('serializer')->defaultValue('fervo_deferred_event.serializer.base64')->end() ->scalarNode('serializer_format')->defaultValue('base64')->end() ->end() @@ -48,4 +51,43 @@ public function getConfigTreeBuilder() return $treeBuilder; } + + private function getBackendsNode() + { + $treeBuilder = new TreeBuilder(); + $node = $treeBuilder->root('backends'); + + $node + ->requiresAtLeastOneElement() + ->useAttributeAsKey('name') + ->prototype('array') + ->children() + ->enumNode('type') + ->values(array('sidekiq', 'immediate', 'amqp')) + ->defaultValue('immediate') + ->end() + ->scalarNode('sidekiq_client_service')->end() + ->arrayNode('amqp_config')->addDefaultsIfNotSet() + ->children() + ->scalarNode('host')->defaultValue('localhost')->end() + ->integerNode('port')->defaultValue(5672)->end() + ->scalarNode('user')->defaultValue('guest')->end() + ->scalarNode('pass')->defaultValue('guest')->end() + ->scalarNode('vhost')->defaultValue('/')->end() + ->end() + ->end() + ->arrayNode('message_headers')->addDefaultsIfNotSet() + ->children() + ->scalarNode('php_bin')->defaultNull()->end() + ->scalarNode('console_path')->defaultNull()->end() + ->scalarNode('dispatch_path')->defaultNull()->end() + ->scalarNode('fastcgi_host')->cannotBeEmpty()->defaultValue('localhost')->end() + ->integerNode('fastcgi_port')->cannotBeEmpty()->defaultValue(9000)->end() + ->end() + ->end() + ->end() + ; + + return $node; + } } From 6ea07da255cc57f531616121539ba379c58f75a7 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Mon, 4 Aug 2014 10:48:08 +0200 Subject: [PATCH 2/2] Adding comments and fixes --- .../CompilerPass/ListenerPass.php | 12 ++++++--- DependencyInjection/Configuration.php | 1 + .../FervoDeferredEventExtension.php | 27 ++++++++++--------- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/DependencyInjection/CompilerPass/ListenerPass.php b/DependencyInjection/CompilerPass/ListenerPass.php index a5b583a..076666e 100644 --- a/DependencyInjection/CompilerPass/ListenerPass.php +++ b/DependencyInjection/CompilerPass/ListenerPass.php @@ -10,8 +10,7 @@ class ListenerPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { - if (!$container->hasDefinition('fervo_deferred_event.dispatcher')) - { + if (!$container->hasDefinition('fervo_deferred_event.dispatcher')) { return; } @@ -21,7 +20,7 @@ public function process(ContainerBuilder $container) $listenerTags = $container->findTaggedServiceIds('fervo_deferred_event.listener'); foreach ($listenerTags as $id => $tags) { foreach ($tags as $tag) { - $deferredEvents[] = $tag['event']; + $deferredEvents[] = array($tag['event'], isset($tag['backend']) ? $tag['backend'] : 'default'); $callArgs = [ $tag['event'], @@ -32,6 +31,8 @@ public function process(ContainerBuilder $container) $callArgs[] = $tag['priority']; } + $callArgs[] = isset($tag['backend']) ? $tag['backend'] : 'default'; + $fervoDispatcherDef->addMethodCall('addListener', $callArgs); } } @@ -43,9 +44,12 @@ public function process(ContainerBuilder $container) $deferredEvents = array_unique($deferredEvents); + // Comment + foreach ($deferredEvents as $event) { $sfDispatcherDef->addMethodCall( - 'addListenerService', [ + 'addListenerService', + [ $event, ['fervo_deferred_event.listener', 'onNonDeferEvent'], -127, diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index f1da62b..5afe091 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -52,6 +52,7 @@ public function getConfigTreeBuilder() return $treeBuilder; } + private function getBackendsNode() { $treeBuilder = new TreeBuilder(); diff --git a/DependencyInjection/FervoDeferredEventExtension.php b/DependencyInjection/FervoDeferredEventExtension.php index a2b3339..f672cb1 100644 --- a/DependencyInjection/FervoDeferredEventExtension.php +++ b/DependencyInjection/FervoDeferredEventExtension.php @@ -28,25 +28,28 @@ public function load(array $configs, ContainerBuilder $container) $container->setAlias('fervo_deferred_event.serializer', $config['serializer']); - if (!empty($config['backend']['sidekiq_client_service'])) { - $def = $container->getDefinition('fervo_deferred_event.queue.sidekiq'); - $def->replaceArgument(0, new Reference($config['backend']['sidekiq_client_service'])); - } + foreach ($config['backends'] as $backend) { + if (!empty($backend['sidekiq_client_service'])) { + $def = $container->getDefinition('fervo_deferred_event.queue.sidekiq'); + $def->replaceArgument(0, new Reference($backend['sidekiq_client_service'])); + } - if ($config['backend']['type']=='amqp') { - $def = $container->getDefinition('fervo_deferred_event.queue.amqp'); - $def->replaceArgument(0, $config['backend']['amqp_config']); - } + if ($backend['type']=='amqp') { + $def = $container->getDefinition('fervo_deferred_event.queue.amqp'); + $def->replaceArgument(0, $backend['amqp_config']); + } - // add message headers to the message service - $def = $container->getDefinition('fervo_deferred_event.service.message_service'); - $def->replaceArgument(0, $config['backend']['message_headers']); + + // add message headers to the message service + $def = $container->getDefinition('fervo_deferred_event.service.message_service'); + $def->replaceArgument(0, $backend['message_headers']); + } $container->setParameter('fervo_deferred_event.serializer_format', $config['serializer_format']); $container->setAlias( 'fervo_deferred_event.queue', - sprintf('fervo_deferred_event.queue.%s', $config['backend']['type']) + sprintf('fervo_deferred_event.queue.%s', $config['backends']['default']['type']) ); } }