Sets the methods to call after service initialization.
public setMethodCalls ( array $calls = [] ) : |
||
$calls | array | An array of method calls |
Результат | The current instance |
/** * @param Definition $definition * @param string $methodName * @param array $arguments */ private function callMethodFirst(Definition $definition, $methodName, array $arguments) { $newMethodCall = array($methodName, $arguments); $currentMethodCalls = $definition->getMethodCalls(); array_unshift($currentMethodCalls, $newMethodCall); $definition->setMethodCalls($currentMethodCalls); }
/** * @param Definition $definition * @param string $name * @param mixed $value */ public function mergeMethodCall(Definition $definition, $name, $value) { $methodCalls = $definition->getMethodCalls(); foreach ($methodCalls as &$calls) { foreach ($calls as &$call) { if (is_string($call)) { if ($call !== $name) { continue 2; } continue 1; } $call = array(array_merge($call[0], $value)); } } $definition->setMethodCalls($methodCalls); }
/** * @param array $services * @throws \Exception */ protected function registerServices(array $services) { foreach ($services as $service => $options) { if (empty($options['class'])) { throw new \Exception(sprintf('Specify your class for %s', $service)); } $arguments = empty($options['arguments']) ? [] : $options['arguments']; $definition = new Definition($options['class'], $arguments); $definition->setMethodCalls(!strstr($service, 'controller') ? [] : [['setRequest', [new Reference('current_request')]]]); if (!empty($options['tags'])) { foreach ($options['tags'] as $name => $attributes) { $definition->addTag($name, is_array($attributes) ? $attributes : []); } } $this->builder->setDefinition($service, $definition); } }
private function injectClassResolverInPlaceHolder(array $attributes, Definition $serviceInWhichInjectDef, $serviceIdInWhichInjectDef) { list(, $group) = $this->computeClassResolverId($attributes); $classResolverId = $this->getClassResolverIdWithGroup('kassko_class_resolver.chain', $group); $index = isset($attributes['index']) ? $attributes['index'] : 0; if (!isset($attributes['method'])) { $serviceInWhichInjectDef->replaceArgument($index, new Reference($classResolverId)); } else { $method = $attributes['method']; $calls = $serviceInWhichInjectDef->getMethodCalls(); foreach ($calls as &$call) { if ($method === $call[0]) { if (!isset($call[1][$index])) { throw new OutOfBoundsException(sprintf('The index attribute "%s" for tag "%s"' . ' and service "%s" is not in the range [0, %d].', $index, $classesToRegisterTag, $serviceIdInWhichInjectDef, count($calls) - 1)); } $call[1][$index] = new Reference($classResolverId); } } unset($call); //Precaution. $serviceInWhichInjectDef->setMethodCalls($calls); } }
/** * {@inheritDoc} */ public function load(array $configs, ContainerBuilder $container) { $config = $this->processConfiguration(new Configuration(), $configs); $loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config')); $loader->load('services.xml'); $container->setAlias('avoo_achievement', $config['service']['class']); $container->setParameter('avoo_achievement.repository', $config['user_achievement_class']); $categories = array(); if (!empty($config['achievements'])) { $categories = array_keys($config['achievements']); } $container->setParameter('avoo_achievement.categories', $categories); foreach ($config['achievements'] as $category => $achievements) { foreach ($achievements as $type => $achievement) { $definition = new Definition(); $definition->setClass($achievement['class']); $definition->setArguments(array('manager' => new Reference('doctrine.orm.default_entity_manager'))); $options = new Definition('Avoo\\AchievementBundle\\Listener\\AchievementOptions', array(array('id' => $category . '.' . $type, 'category' => $category, 'name' => $achievement['name'], 'value' => $achievement['value'], 'description' => isset($achievement['description']) ? $achievement['description'] : null, 'image' => $achievement['image']))); $definition->setMethodCalls(array(array('setOptions', array($options)), array('setUser', array(new Reference('security.token_storage'))), array('setRepository', array($config['user_achievement_class'])))); $definition->addTag('avoo_achievement.achievement', array('type' => $category . '.' . $type)); $container->setDefinition(sprintf('avoo_achievement.achievement.%s.%s', $category, $type), $definition); } } }
/** * Resolves the definition. * * @param ContainerBuilder $container The ContainerBuilder * @param DefinitionDecorator $definition * * @return Definition * * @throws \RuntimeException When the definition is invalid */ private function resolveDefinition(ContainerBuilder $container, DefinitionDecorator $definition) { if (!$container->hasDefinition($parent = $definition->getParent())) { throw new RuntimeException(sprintf('The parent definition "%s" defined for definition "%s" does not exist.', $parent, $this->currentId)); } $parentDef = $container->getDefinition($parent); if ($parentDef instanceof DefinitionDecorator) { $id = $this->currentId; $this->currentId = $parent; $parentDef = $this->resolveDefinition($container, $parentDef); $container->setDefinition($parent, $parentDef); $this->currentId = $id; } $this->compiler->addLogMessage($this->formatter->formatResolveInheritance($this, $this->currentId, $parent)); $def = new Definition(); // merge in parent definition // purposely ignored attributes: scope, abstract, tags $def->setClass($parentDef->getClass()); $def->setArguments($parentDef->getArguments()); $def->setMethodCalls($parentDef->getMethodCalls()); $def->setProperties($parentDef->getProperties()); $def->setAutowiringTypes($parentDef->getAutowiringTypes()); if ($parentDef->getFactoryClass(false)) { $def->setFactoryClass($parentDef->getFactoryClass(false)); } if ($parentDef->getFactoryMethod(false)) { $def->setFactoryMethod($parentDef->getFactoryMethod(false)); } if ($parentDef->getFactoryService(false)) { $def->setFactoryService($parentDef->getFactoryService(false)); } if ($parentDef->isDeprecated()) { $def->setDeprecated(true, $parentDef->getDeprecationMessage('%service_id%')); } $def->setFactory($parentDef->getFactory()); $def->setConfigurator($parentDef->getConfigurator()); $def->setFile($parentDef->getFile()); $def->setPublic($parentDef->isPublic()); $def->setLazy($parentDef->isLazy()); // overwrite with values specified in the decorator $changes = $definition->getChanges(); if (isset($changes['class'])) { $def->setClass($definition->getClass()); } if (isset($changes['factory_class'])) { $def->setFactoryClass($definition->getFactoryClass(false)); } if (isset($changes['factory_method'])) { $def->setFactoryMethod($definition->getFactoryMethod(false)); } if (isset($changes['factory_service'])) { $def->setFactoryService($definition->getFactoryService(false)); } if (isset($changes['factory'])) { $def->setFactory($definition->getFactory()); } if (isset($changes['configurator'])) { $def->setConfigurator($definition->getConfigurator()); } if (isset($changes['file'])) { $def->setFile($definition->getFile()); } if (isset($changes['public'])) { $def->setPublic($definition->isPublic()); } if (isset($changes['lazy'])) { $def->setLazy($definition->isLazy()); } if (isset($changes['deprecated'])) { $def->setDeprecated($definition->isDeprecated(), $definition->getDeprecationMessage('%service_id%')); } if (isset($changes['decorated_service'])) { $decoratedService = $definition->getDecoratedService(); if (null === $decoratedService) { $def->setDecoratedService($decoratedService); } else { $def->setDecoratedService($decoratedService[0], $decoratedService[1], $decoratedService[2]); } } // merge arguments foreach ($definition->getArguments() as $k => $v) { if (is_numeric($k)) { $def->addArgument($v); continue; } if (0 !== strpos($k, 'index_')) { throw new RuntimeException(sprintf('Invalid argument key "%s" found.', $k)); } $index = (int) substr($k, strlen('index_')); $def->replaceArgument($index, $v); } // merge properties foreach ($definition->getProperties() as $k => $v) { $def->setProperty($k, $v); } // append method calls if (count($calls = $definition->getMethodCalls()) > 0) { $def->setMethodCalls(array_merge($def->getMethodCalls(), $calls)); } // merge autowiring types foreach ($definition->getAutowiringTypes() as $autowiringType) { $def->addAutowiringType($autowiringType); } // these attributes are always taken from the child $def->setAbstract($definition->isAbstract()); $def->setScope($definition->getScope(false), false); $def->setShared($definition->isShared()); $def->setTags($definition->getTags()); return $def; }
/** * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container * @param \Symfony\Component\DependencyInjection\Definition $definition * * @return void */ public function fixTemplates(ContainerBuilder $container, Definition $definition) { $definedTemplates = $container->getParameter('sonata.admin.configuration.templates'); $methods = array(); $pos = 0; foreach ($definition->getMethodCalls() as $method) { if ($method[0] == 'setTemplates') { $definedTemplates = array_merge($definedTemplates, $method[1][0]); continue; } if ($method[0] == 'setTemplate') { $definedTemplates[$method[1][0]] = $method[1][1]; continue; } $methods[$pos] = $method; $pos++; } $definition->setMethodCalls($methods); // make sure the default templates are defined $definedTemplates = array_merge(array('user_block' => 'SonataAdminBundle:Core:user_block.html.twig', 'add_block' => 'SonataAdminBundle:Core:add_block.html.twig', 'layout' => 'SonataAdminBundle::standard_layout.html.twig', 'ajax' => 'SonataAdminBundle::ajax_layout.html.twig', 'dashboard' => 'SonataAdminBundle:Core:dashboard.html.twig', 'list' => 'SonataAdminBundle:CRUD:list.html.twig', 'filter' => 'SonataAdminBundle:Form:filter_admin_fields.html.twig', 'show' => 'SonataAdminBundle:CRUD:show.html.twig', 'show_compare' => 'SonataAdminBundle:CRUD:show_compare.html.twig', 'edit' => 'SonataAdminBundle:CRUD:edit.html.twig', 'history' => 'SonataAdminBundle:CRUD:history.html.twig', 'history_revision_timestamp' => 'SonataAdminBundle:CRUD:history_revision_timestamp.html.twig', 'acl' => 'SonataAdminBundle:CRUD:acl.html.twig', 'action' => 'SonataAdminBundle:CRUD:action.html.twig', 'short_object_description' => 'SonataAdminBundle:Helper:short-object-description.html.twig', 'preview' => 'SonataAdminBundle:CRUD:preview.html.twig', 'list_block' => 'SonataAdminBundle:Block:block_admin_list.html.twig', 'delete' => 'SonataAdminBundle:CRUD:delete.html.twig', 'batch' => 'SonataAdminBundle:CRUD:list__batch.html.twig', 'select' => 'SonataAdminBundle:CRUD:list__select.html.twig', 'batch_confirmation' => 'SonataAdminBundle:CRUD:batch_confirmation.html.twig', 'inner_list_row' => 'SonataAdminBundle:CRUD:list_inner_row.html.twig', 'base_list_field' => 'SonataAdminBundle:CRUD:base_list_field.html.twig', 'pager_links' => 'SonataAdminBundle:Pager:links.html.twig', 'pager_results' => 'SonataAdminBundle:Pager:results.html.twig', 'tab_menu_template' => 'SonataAdminBundle:Core:tab_menu_template.html.twig'), $definedTemplates); $definition->addMethodCall('setTemplates', array($definedTemplates)); }
/** * Resolves the definition * * @param string $id The definition identifier * @param DefinitionDecorator $definition * * @return Definition */ private function resolveDefinition($id, DefinitionDecorator $definition) { if (!$this->container->hasDefinition($parent = $definition->getParent())) { throw new RuntimeException(sprintf('The parent definition "%s" defined for definition "%s" does not exist.', $parent, $id)); } $parentDef = $this->container->getDefinition($parent); if ($parentDef instanceof DefinitionDecorator) { $parentDef = $this->resolveDefinition($parent, $parentDef); } $this->compiler->addLogMessage($this->formatter->formatResolveInheritance($this, $id, $parent)); $def = new Definition(); // merge in parent definition // purposely ignored attributes: scope, abstract, tags $def->setClass($parentDef->getClass()); $def->setArguments($parentDef->getArguments()); $def->setMethodCalls($parentDef->getMethodCalls()); $def->setProperties($parentDef->getProperties()); $def->setFactoryClass($parentDef->getFactoryClass()); $def->setFactoryMethod($parentDef->getFactoryMethod()); $def->setFactoryService($parentDef->getFactoryService()); $def->setConfigurator($parentDef->getConfigurator()); $def->setFile($parentDef->getFile()); $def->setPublic($parentDef->isPublic()); // overwrite with values specified in the decorator $changes = $definition->getChanges(); if (isset($changes['class'])) { $def->setClass($definition->getClass()); } if (isset($changes['factory_class'])) { $def->setFactoryClass($definition->getFactoryClass()); } if (isset($changes['factory_method'])) { $def->setFactoryMethod($definition->getFactoryMethod()); } if (isset($changes['factory_service'])) { $def->setFactoryService($definition->getFactoryService()); } if (isset($changes['configurator'])) { $def->setConfigurator($definition->getConfigurator()); } if (isset($changes['file'])) { $def->setFile($definition->getFile()); } if (isset($changes['public'])) { $def->setPublic($definition->isPublic()); } // merge arguments foreach ($definition->getArguments() as $k => $v) { if (is_numeric($k)) { $def->addArgument($v); continue; } if (0 !== strpos($k, 'index_')) { throw new RuntimeException(sprintf('Invalid argument key "%s" found.', $k)); } $index = (int) substr($k, strlen('index_')); $def->replaceArgument($index, $v); } // merge properties foreach ($definition->getProperties() as $k => $v) { $def->setProperty($k, $v); } // append method calls if (count($calls = $definition->getMethodCalls()) > 0) { $def->setMethodCalls(array_merge($def->getMethodCalls(), $calls)); } // these attributes are always taken from the child $def->setAbstract($definition->isAbstract()); $def->setScope($definition->getScope()); $def->setTags($definition->getTags()); // set new definition on container $this->container->setDefinition($id, $def); return $def; }
/** * @param ContainerBuilder $container * @param Definition $definition * @param array $overwrittenTemplates */ public function fixTemplates(ContainerBuilder $container, Definition $definition, array $overwrittenTemplates = array()) { $definedTemplates = $container->getParameter('sonata.admin.configuration.templates'); $methods = array(); $pos = 0; foreach ($definition->getMethodCalls() as $method) { if ($method[0] == 'setTemplates') { $definedTemplates = array_merge($definedTemplates, $method[1][0]); continue; } if ($method[0] == 'setTemplate') { $definedTemplates[$method[1][0]] = $method[1][1]; continue; } // set template for simple pager if it is not already overwritten if ($method[0] === 'setPagerType' && $method[1][0] === Pager::TYPE_SIMPLE && (!isset($definedTemplates['pager_results']) || $definedTemplates['pager_results'] === 'SonataAdminBundle:Pager:results.html.twig')) { $definedTemplates['pager_results'] = 'SonataAdminBundle:Pager:simple_pager_results.html.twig'; } $methods[$pos] = $method; ++$pos; } $definition->setMethodCalls($methods); // make sure the default templates are defined $definedTemplates = array_merge(array('user_block' => 'SonataAdminBundle:Core:user_block.html.twig', 'add_block' => 'SonataAdminBundle:Core:add_block.html.twig', 'layout' => 'SonataAdminBundle::standard_layout.html.twig', 'ajax' => 'SonataAdminBundle::ajax_layout.html.twig', 'dashboard' => 'SonataAdminBundle:Core:dashboard.html.twig', 'list' => 'SonataAdminBundle:CRUD:list.html.twig', 'filter' => 'SonataAdminBundle:Form:filter_admin_fields.html.twig', 'show' => 'SonataAdminBundle:CRUD:show.html.twig', 'show_compare' => 'SonataAdminBundle:CRUD:show_compare.html.twig', 'edit' => 'SonataAdminBundle:CRUD:edit.html.twig', 'history' => 'SonataAdminBundle:CRUD:history.html.twig', 'history_revision_timestamp' => 'SonataAdminBundle:CRUD:history_revision_timestamp.html.twig', 'acl' => 'SonataAdminBundle:CRUD:acl.html.twig', 'action' => 'SonataAdminBundle:CRUD:action.html.twig', 'short_object_description' => 'SonataAdminBundle:Helper:short-object-description.html.twig', 'preview' => 'SonataAdminBundle:CRUD:preview.html.twig', 'list_block' => 'SonataAdminBundle:Block:block_admin_list.html.twig', 'delete' => 'SonataAdminBundle:CRUD:delete.html.twig', 'batch' => 'SonataAdminBundle:CRUD:list__batch.html.twig', 'select' => 'SonataAdminBundle:CRUD:list__select.html.twig', 'batch_confirmation' => 'SonataAdminBundle:CRUD:batch_confirmation.html.twig', 'inner_list_row' => 'SonataAdminBundle:CRUD:list_inner_row.html.twig', 'base_list_field' => 'SonataAdminBundle:CRUD:base_list_field.html.twig', 'pager_links' => 'SonataAdminBundle:Pager:links.html.twig', 'pager_results' => 'SonataAdminBundle:Pager:results.html.twig', 'tab_menu_template' => 'SonataAdminBundle:Core:tab_menu_template.html.twig', 'knp_menu_template' => 'SonataAdminBundle:Menu:sonata_menu.html.twig', 'outer_list_rows_mosaic' => 'SonataAdminBundle:CRUD:list_outer_rows_mosaic.html.twig', 'outer_list_rows_list' => 'SonataAdminBundle:CRUD:list_outer_rows_list.html.twig', 'outer_list_rows_tree' => 'SonataAdminBundle:CRUD:list_outer_rows_tree.html.twig'), $definedTemplates, $overwrittenTemplates['view']); $definition->addMethodCall('setTemplates', array($definedTemplates)); }
private function registerController(ContainerBuilder $container, $id, $class, $calls = array()) { $controller = new Definition($class); $controller->setMethodCalls($calls); $container->setDefinition($id, $controller); }
public function testProcess() { $container = new ContainerBuilder(); $container->setParameter('ezpublish.config_resolver.updateable_services', array()); $updateableServices = array(); $def1Arg1 = 'foo'; $def1Arg2 = new Reference('foo.bar'); $def1 = new Definition('stdClass', array($def1Arg1, $def1Arg2)); $def2 = new Definition('stdClass', array('$bar;some_namespace$', array())); $def3 = new Definition('stdClass', array('$content.default_ttl;ezsettings;ezdemo_site_admin$')); $def4 = new Definition('stdClass', array('$languages$')); $def5Arg1 = new Reference('def3'); $def5 = new Definition('stdClass', array($def5Arg1)); $def6Arg1 = new Reference('def1'); $def6Arg2 = new Reference('def4'); $def6 = new Definition('stdClass', array($def6Arg1, $def6Arg2)); $def7MethodCalls = array(array('setFoo', array('something', new Reference('def1'))), array('setBar', array(array('baz')))); $def7 = new Definition('stdClass'); $def7->setMethodCalls($def7MethodCalls); $def8MethodCalls = array(array('setFoo', array('$foo$')), array('setBar', array('$bar;baz$'))); $def8 = new Definition('stdClass'); $def8->setMethodCalls($def8MethodCalls); $container->setDefinitions(array('def1' => $def1, 'def2' => $def2, 'def3' => $def3, 'def4' => $def4, 'def5' => $def5, 'def6' => $def6, 'def7' => $def7, 'def8' => $def8)); $configResolverPass = new ConfigResolverParameterPass(new DynamicSettingParser()); $configResolverPass->process($container); // Ensure that non concerned services stayed untouched. self::assertSame($def1Arg1, $def1->getArgument(0)); self::assertSame($def1Arg2, $def1->getArgument(1)); self::assertSame($def1, $container->getDefinition('def1')); self::assertSame($def5Arg1, $def5->getArgument(0)); self::assertSame($def5, $container->getDefinition('def5')); self::assertSame($def6Arg1, $def6->getArgument(0)); self::assertSame($def6Arg2, $def6->getArgument(1)); self::assertSame($def6, $container->getDefinition('def6')); self::assertSame($def7MethodCalls, $def7->getMethodCalls()); self::assertSame($def7, $container->getDefinition('def7')); // Check that concerned services arguments have been correctly transformed. $def2arg1 = $def2->getArgument(0); self::assertInstanceOf('Symfony\\Component\\ExpressionLanguage\\Expression', $def2arg1); self::assertSame('service("ezpublish.config.resolver").getParameter("bar", "some_namespace", null)', (string) $def2arg1); // Also check 2nd argument self::assertSame(array(), $def2->getArgument(1)); $def3arg1 = $def3->getArgument(0); self::assertInstanceOf('Symfony\\Component\\ExpressionLanguage\\Expression', $def3arg1); self::assertSame('service("ezpublish.config.resolver").getParameter("content.default_ttl", "ezsettings", "ezdemo_site_admin")', (string) $def3arg1); $def4arg1 = $def4->getArgument(0); self::assertInstanceOf('Symfony\\Component\\ExpressionLanguage\\Expression', $def4arg1); self::assertSame('service("ezpublish.config.resolver").getParameter("languages", null, null)', (string) $def4arg1); $def8Calls = $def8->getMethodCalls(); self::assertSame(count($def8MethodCalls), count($def8Calls)); self::assertSame($def8MethodCalls[0][0], $def8Calls[0][0]); self::assertInstanceOf('Symfony\\Component\\ExpressionLanguage\\Expression', $def8Calls[0][1][0]); $exprSetFoo = 'service("ezpublish.config.resolver").getParameter("foo", null, null)'; self::assertSame($exprSetFoo, (string) $def8Calls[0][1][0]); self::assertSame($def8MethodCalls[1][0], $def8Calls[1][0]); self::assertInstanceOf('Symfony\\Component\\ExpressionLanguage\\Expression', $def8Calls[1][1][0]); $exprSetBar = 'service("ezpublish.config.resolver").getParameter("bar", "baz", null)'; self::assertSame($exprSetBar, (string) $def8Calls[1][1][0]); $updateableServices['def8'] = array(array('setFoo', $exprSetFoo), array('setBar', $exprSetBar)); self::assertTrue($container->hasParameter('ezpublish.config_resolver.resettable_services')); self::assertEquals(array('def2', 'def3', 'def4', 'def5', 'def6'), $container->getParameter('ezpublish.config_resolver.resettable_services')); self::assertEquals($updateableServices, $container->getParameter('ezpublish.config_resolver.updateable_services')); }
public function testProcess() { $container = new ContainerBuilder(); $dynamicSettingsServices = array(); $def1Arg1 = 'foo'; $def1Arg2 = new Reference('foo.bar'); $def1 = new Definition('stdClass', array($def1Arg1, $def1Arg2)); $def2 = new Definition('stdClass', array('$bar;some_namespace$', array())); $def3 = new Definition('stdClass', array('$content.default_ttl;ezsettings;ezdemo_site_admin$')); $def4 = new Definition('stdClass', array('$languages$')); $def5Arg1 = new Reference('def3'); $def5 = new Definition('stdClass', array($def5Arg1)); $def6Arg1 = new Reference('def1'); $def6Arg2 = new Reference('def4'); $def6 = new Definition('stdClass', array($def6Arg1, $def6Arg2)); $def7MethodCalls = array(array('setFoo', array('something', new Reference('def1'))), array('setBar', array(array('baz')))); $def7 = new Definition('stdClass'); $def7->setMethodCalls($def7MethodCalls); $def8MethodCalls = array(array('setFoo', array('$foo$')), array('setBar', array('$bar;baz$'))); $def8 = new Definition('stdClass'); $def8->setMethodCalls($def8MethodCalls); $container->setDefinitions(array('def1' => $def1, 'def2' => $def2, 'def3' => $def3, 'def4' => $def4, 'def5' => $def5, 'def6' => $def6, 'def7' => $def7, 'def8' => $def8)); $configResolverPass = new ConfigResolverParameterPass(new DynamicSettingParser()); $configResolverPass->process($container); // Ensure that non concerned services stayed untouched. $this->assertSame($def1Arg1, $def1->getArgument(0)); $this->assertSame($def1Arg2, $def1->getArgument(1)); $this->assertSame($def1, $container->getDefinition('def1')); $this->assertSame($def5Arg1, $def5->getArgument(0)); $this->assertSame($def5, $container->getDefinition('def5')); $this->assertSame($def6Arg1, $def6->getArgument(0)); $this->assertSame($def6Arg2, $def6->getArgument(1)); $this->assertSame($def6, $container->getDefinition('def6')); $this->assertSame($def7MethodCalls, $def7->getMethodCalls()); $this->assertSame($def7, $container->getDefinition('def7')); // Check that concerned services arguments have been correctly transformed. /** @var Reference $def2arg1 */ $def2arg1 = $def2->getArgument(0); $this->assertInstanceOf('Symfony\\Component\\DependencyInjection\\Reference', $def2arg1); $expectedServiceHelperId1 = 'ezpublish.config_resolver.fake.bar_some_namespace_'; $dynamicSettingsServices[] = $expectedServiceHelperId1; $this->assertSame((string) $def2arg1, $expectedServiceHelperId1); $this->assertTrue($container->has($expectedServiceHelperId1)); $defHelper1 = $container->getDefinition($expectedServiceHelperId1); $this->assertSame('ezpublish.config.resolver', $defHelper1->getFactoryService()); $this->assertSame('getParameter', $defHelper1->getFactoryMethod()); $this->assertSame(array('bar', 'some_namespace', null), $defHelper1->getArguments()); // Also check 2nd argument $this->assertSame(array(), $def2->getArgument(1)); /** @var Reference $def3arg1 */ $def3arg1 = $def3->getArgument(0); $this->assertInstanceOf('Symfony\\Component\\DependencyInjection\\Reference', $def3arg1); $expectedServiceHelperId2 = 'ezpublish.config_resolver.fake.content.default_ttl_ezsettings_ezdemo_site_admin'; $dynamicSettingsServices[] = $expectedServiceHelperId2; $this->assertSame((string) $def3arg1, $expectedServiceHelperId2); $this->assertTrue($container->has($expectedServiceHelperId2)); $defHelper2 = $container->getDefinition($expectedServiceHelperId2); $this->assertSame('ezpublish.config.resolver', $defHelper2->getFactoryService()); $this->assertSame('getParameter', $defHelper2->getFactoryMethod()); $this->assertSame(array('content.default_ttl', 'ezsettings', 'ezdemo_site_admin'), $defHelper2->getArguments()); /** @var Reference $def4arg1 */ $def4arg1 = $def4->getArgument(0); $this->assertInstanceOf('Symfony\\Component\\DependencyInjection\\Reference', $def4arg1); $expectedServiceHelperId3 = 'ezpublish.config_resolver.fake.languages__'; $dynamicSettingsServices[] = $expectedServiceHelperId3; $this->assertSame((string) $def4arg1, $expectedServiceHelperId3); $this->assertTrue($container->has($expectedServiceHelperId3)); $defHelper3 = $container->getDefinition($expectedServiceHelperId3); $this->assertSame('ezpublish.config.resolver', $defHelper3->getFactoryService()); $this->assertSame('getParameter', $defHelper3->getFactoryMethod()); $this->assertSame(array('languages', null, null), $defHelper3->getArguments()); /** @var Reference $def4arg1 */ $def8Calls = $def8->getMethodCalls(); $this->assertSame(count($def8MethodCalls), count($def8Calls)); $this->assertSame($def8MethodCalls[0][0], $def8Calls[0][0]); $this->assertInstanceOf('Symfony\\Component\\DependencyInjection\\Reference', $def8Calls[0][1][0]); $expectedServiceHelperId4 = 'ezpublish.config_resolver.fake.foo__'; $dynamicSettingsServices[] = $expectedServiceHelperId4; $this->assertSame((string) $def8Calls[0][1][0], $expectedServiceHelperId4); $this->assertTrue($container->has($expectedServiceHelperId4)); $defHelper4 = $container->getDefinition($expectedServiceHelperId4); $this->assertSame('ezpublish.config.resolver', $defHelper4->getFactoryService()); $this->assertSame('getParameter', $defHelper4->getFactoryMethod()); $this->assertSame(array('foo', null, null), $defHelper4->getArguments()); $this->assertSame($def8MethodCalls[1][0], $def8Calls[1][0]); $this->assertInstanceOf('Symfony\\Component\\DependencyInjection\\Reference', $def8Calls[1][1][0]); $expectedServiceHelperId5 = 'ezpublish.config_resolver.fake.bar_baz_'; $dynamicSettingsServices[] = $expectedServiceHelperId5; $this->assertSame((string) $def8Calls[1][1][0], $expectedServiceHelperId5); $this->assertTrue($container->has($expectedServiceHelperId5)); $defHelper5 = $container->getDefinition($expectedServiceHelperId5); $this->assertSame('ezpublish.config.resolver', $defHelper5->getFactoryService()); $this->assertSame('getParameter', $defHelper5->getFactoryMethod()); $this->assertSame(array('bar', 'baz', null), $defHelper5->getArguments()); $this->assertTrue($container->hasParameter('ezpublish.config_resolver.resettable_services')); $this->assertEquals(array('def2', 'def3', 'def4', 'def5', 'def6'), $container->getParameter('ezpublish.config_resolver.resettable_services')); $this->assertTrue($container->hasParameter('ezpublish.config_resolver.dynamic_settings_services')); $this->assertEquals($dynamicSettingsServices, $container->getParameter('ezpublish.config_resolver.dynamic_settings_services')); }
/** * Set the methods to call after service initialization. * * @param array $calls An array of method calls * * @return tubepress_api_ioc_DefinitionInterface The current instance * * @api * @since 4.0.0 */ public function setMethodCalls(array $calls = array()) { $cleaned = $this->convertToSymfonyReferenceIfNecessary($calls); $this->_underlyingSymfonyDefinition->setMethodCalls($cleaned); return $this; }
/** * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container * @param \Symfony\Component\DependencyInjection\Definition $definition * @return void */ public function fixTemplates(ContainerBuilder $container, Definition $definition) { $definedTemplates = $container->getParameter('sonata.admin.configuration.templates'); $methods = array(); $pos = 0; foreach ($definition->getMethodCalls() as $method) { if ($method[0] == 'setTemplates') { $definedTemplates = array_merge($definedTemplates, $method[1][0]); continue; } if ($method[0] == 'setTemplate') { $definedTemplates[$method[1][0]] = $method[1][1]; continue; } $methods[$pos] = $method; $pos++; } $definition->setMethodCalls($methods); // make sure the default templates are defined $definedTemplates = array_merge(array('user_block' => 'SonataAdminBundle:Core:user_block.html.twig', 'layout' => 'SonataAdminBundle::standard_layout.html.twig', 'ajax' => 'SonataAdminBundle::ajax_layout.html.twig', 'dashboard' => 'SonataAdminBundle:Core:dashboard.html.twig', 'list' => 'SonataAdminBundle:CRUD:list.html.twig', 'show' => 'SonataAdminBundle:CRUD:show.html.twig', 'edit' => 'SonataAdminBundle:CRUD:edit.html.twig', 'history' => 'SonataAdminBundle:CRUD:history.html.twig', 'history_revision' => 'SonataAdminBundle:CRUD:history_revision.html.twig', 'action' => 'SonataAdminBundle:CRUD:action.html.twig', 'short_object_description' => 'SonataAdminBundle:Helper:short-object-description.html.twig'), $definedTemplates); $definition->addMethodCall('setTemplates', array($definedTemplates)); }
/** * @param string $class * @param Definition $definition * @param string[] $classes * @param string $id * @param ContainerBuilder $container */ private function autowireSetters($class, Definition $definition, array $classes, $id, ContainerBuilder $container) { $newCalls = array(); foreach ($definition->getMethodCalls() as $call) { $method = new ReflectionMethod($class, $call[0]); $autowiredArgs = $this->autowireMethod($method, $call[1], $classes, $id, $container); $newCalls[] = array($call[0], $autowiredArgs); } $definition->setMethodCalls($newCalls); }