public function DependencySerializationTraitPass::process in Drupal 10
Same name and namespace in other branches
- 8 core/lib/Drupal/Core/DependencyInjection/Compiler/DependencySerializationTraitPass.php \Drupal\Core\DependencyInjection\Compiler\DependencySerializationTraitPass::process()
- 9 core/lib/Drupal/Core/DependencyInjection/Compiler/DependencySerializationTraitPass.php \Drupal\Core\DependencyInjection\Compiler\DependencySerializationTraitPass::process()
File
- core/
lib/ Drupal/ Core/ DependencyInjection/ Compiler/ DependencySerializationTraitPass.php, line 18
Class
- DependencySerializationTraitPass
- Sets the _serviceId property on all services.
Namespace
Drupal\Core\DependencyInjection\CompilerCode
public function process(ContainerBuilder $container) {
$decorations = new \SplPriorityQueue();
$order = PHP_INT_MAX;
foreach ($container
->getDefinitions() as $service_id => $definition) {
// Only add the property to services that are public (as private services
// can not be reloaded through Container::get()) and are objects.
if (!$definition
->hasTag('parameter_service') && $definition
->isPublic()) {
$definition
->setProperty('_serviceId', $service_id);
}
if ($decorated = $definition
->getDecoratedService()) {
$decorations
->insert([
$service_id,
$definition,
], [
$decorated[2],
--$order,
]);
}
}
foreach ($decorations as list($service_id, $definition)) {
list($inner, $renamedId) = $definition
->getDecoratedService();
if (!$renamedId) {
$renamedId = $service_id . '.inner';
}
$original = $container
->getDefinition($inner);
if ($original
->isPublic()) {
// The old service is renamed.
$original
->setProperty('_serviceId', $renamedId);
// The decorating service takes over the old ID.
$definition
->setProperty('_serviceId', $inner);
}
}
}