/** * @param string $class * @param Definition $definition * @param string[] $classes * @param string $id * @param ContainerBuilder $container */ private function autowireConstructor($class, Definition $definition, array $classes, $id, ContainerBuilder $container) { $reflection = new ReflectionClass($class); $constructor = $reflection->getConstructor(); // service not created by factory with public constructor with not fully configured arguments if ($constructor !== NULL && $constructor->isPublic() && $definition->getFactoryMethod() === NULL) { $autowiredArgs = $this->autowireMethod($constructor, $definition->getArguments(), $classes, $id, $container); if ($definition instanceof DefinitionDecorator && $definition->getParent() !== NULL) { $parentDef = $container->getDefinition($definition->getParent()); $parentDefArgsCount = count($parentDef->getArguments()); $argsToReplace = array(); foreach ($autowiredArgs as $i => $arg) { if ($i < $parentDefArgsCount) { $argsToReplace[$i] = $arg; unset($autowiredArgs[$i]); } } $definition->setArguments($autowiredArgs); foreach ($argsToReplace as $i => $arg) { $definition->replaceArgument($i, $arg); } } else { $definition->setArguments($autowiredArgs); } } }
/** * Gets class of the given definition. * * @param ContainerBuilder $container * @param Definition $definition * * @return string|null */ private function getClass(ContainerBuilder $container, Definition $definition) { if ($class = $definition->getClass()) { return $class; } if ($definition instanceof DefinitionDecorator) { return $container->getDefinition($definition->getParent())->getClass(); } }
private function assertUrlPackage(ContainerBuilder $container, Definition $package, $baseUrls, $version, $format) { $this->assertEquals('assets.url_package', $package->getParent()); $this->assertEquals($baseUrls, $package->getArgument(0)); $this->assertVersionStrategy($container, $package->getArgument(1), $version, $format); }
/** * Try to hydrate definition array method calls with definition entity. * * @param Definition $definition the definition to convert * @param array $definitionArray the definition array (passed by reference) */ private function hydrateDefinitionParent(Definition $definition, array &$definitionArray) { if ($definition instanceof DefinitionDecorator) { $definitionArray['parent'] = $definition->getParent(); } }