Parses an individual Definition
string $id:
SimpleXMLElement $service:
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 Alias((string) $service['alias'], $public));
return;
}
if (isset($service['parent'])) {
$definition = new DefinitionDecorator((string) $service['parent']);
}
else {
$definition = new 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 Reference((string) $service->configurator['service'], 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] = SimpleXMLElement::phpize($value);
}
$definition
->addTag((string) $tag['name'], $parameters);
}
$this->container
->setDefinition($id, $definition);
}