protected function recursiveRawDecode(array &$data, \SimpleXMLElement $node) { if ($node->count()) { if (!array_key_exists($node->getName(), $data)) { $data[$node->getName()] = []; } $row =& $data[$node->getName()]; foreach ($node->children() as $child) { $this->recursiveRawDecode($row, $child); } } else { $newRow = array(); /** @var SimpleXMLElement $attribute */ foreach ($node->attributes() as $attribute) { $newRow[$attribute->getName()] = $node->getAttributeAsPhp($attribute->getName()); } if ($node->getName() === $this->nodeName) { $data[] = $newRow; } else { $data[$node->getName()] = $newRow; } } }
/** * Parses an individual ehough_iconic_Definition * * @param string $id * @param SimpleXMLElement $service * @param string $file */ private function parseDefinition($id, $service, $file) { if ((string) $service['alias']) { $public = true; if (isset($service['public'])) { $public = $service->getAttributeAsPhp('public'); } $this->container->setAlias($id, new ehough_iconic_Alias((string) $service['alias'], $public)); return; } if (isset($service['parent'])) { $definition = new ehough_iconic_DefinitionDecorator((string) $service['parent']); } else { $definition = new ehough_iconic_Definition(); } foreach (array('class', 'scope', 'public', 'factory-class', 'factory-method', 'factory-service', 'synthetic', 'synchronized', 'lazy', 'abstract') as $key) { if (isset($service[$key])) { $method = 'set' . str_replace('-', '', $key); $definition->{$method}((string) $service->getAttributeAsPhp($key)); } } if ($service->file) { $definition->setFile((string) $service->file); } $definition->setArguments($service->getArgumentsAsPhp('argument')); $definition->setProperties($service->getArgumentsAsPhp('property')); if (isset($service->configurator)) { if (isset($service->configurator['function'])) { $definition->setConfigurator((string) $service->configurator['function']); } else { if (isset($service->configurator['service'])) { $class = new ehough_iconic_Reference((string) $service->configurator['service'], ehough_iconic_ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false); } else { $class = (string) $service->configurator['class']; } $definition->setConfigurator(array($class, (string) $service->configurator['method'])); } } foreach ($service->call as $call) { $definition->addMethodCall((string) $call['method'], $call->getArgumentsAsPhp('argument')); } foreach ($service->tag as $tag) { $parameters = array(); foreach ($tag->attributes() as $name => $value) { if ('name' === $name) { continue; } $parameters[$name] = ehough_iconic_SimpleXMLElement::phpize($value); } $definition->addTag((string) $tag['name'], $parameters); } $this->container->setDefinition($id, $definition); }