eZ\Bundle\EzPublishRestBundle\DependencyInjection\Compiler\ValueObjectVisitorPass::process PHP Method

process() public method

public process ( ContainerBuilder $container )
$container Symfony\Component\DependencyInjection\ContainerBuilder
    public function process(ContainerBuilder $container)
    {
        if (!$container->hasDefinition('ezpublish_rest.output.value_object_visitor.dispatcher')) {
            return;
        }
        $definition = $container->getDefinition('ezpublish_rest.output.value_object_visitor.dispatcher');
        foreach ($container->findTaggedServiceIds('ezpublish_rest.output.value_object_visitor') as $id => $attributes) {
            foreach ($attributes as $attribute) {
                if (!isset($attribute['type'])) {
                    throw new \LogicException('ezpublish_rest.output.value_object_visitor service tag needs a "type" attribute to identify the field type. None given.');
                }
                $definition->addMethodCall('addVisitor', array($attribute['type'], new Reference($id)));
            }
        }
    }

Usage Example

 public function testProcess()
 {
     $visitorDefinition = new Definition();
     $visitorDefinition->addTag('ezpublish_rest.output.value_object_visitor', array('type' => 'test'));
     $containerBuilder = new ContainerBuilder();
     $containerBuilder->addDefinitions(array('ezpublish_rest.output.value_object_visitor.dispatcher' => new Definition(), 'ezpublish_rest.output.value_object_visitor.test' => $visitorDefinition));
     $compilerPass = new ValueObjectVisitorPass();
     $compilerPass->process($containerBuilder);
     $dispatcherMethodCalls = $containerBuilder->getDefinition('ezpublish_rest.output.value_object_visitor.dispatcher')->getMethodCalls();
     self::assertTrue(isset($dispatcherMethodCalls[0][0]), 'Failed asserting that dispatcher has a method call');
     self::assertEquals('addVisitor', $dispatcherMethodCalls[0][0], "Failed asserting that called method is 'addVisitor'");
     self::assertInstanceOf('Symfony\\Component\\DependencyInjection\\Reference', $dispatcherMethodCalls[0][1][1], 'Failed asserting that method call is to a Reference object');
     self::assertEquals('ezpublish_rest.output.value_object_visitor.test', $dispatcherMethodCalls[0][1][1]->__toString(), "Failed asserting that Referenced service is 'ezpublish_rest.output.value_object_visitor.test'");
 }
ValueObjectVisitorPass