public function ProxyServicesPass::process in Drupal 8
Same name and namespace in other branches
- 9 core/lib/Drupal/Core/DependencyInjection/Compiler/ProxyServicesPass.php \Drupal\Core\DependencyInjection\Compiler\ProxyServicesPass::process()
File
- core/
lib/ Drupal/ Core/ DependencyInjection/ Compiler/ ProxyServicesPass.php, line 18
Class
- ProxyServicesPass
- Replaces all services with a lazy flag.
Namespace
Drupal\Core\DependencyInjection\CompilerCode
public function process(ContainerBuilder $container) {
foreach ($container
->getDefinitions() as $service_id => $definition) {
if ($definition
->isLazy()) {
$proxy_class = ProxyBuilder::buildProxyClassName($definition
->getClass());
if (class_exists($proxy_class)) {
// Copy the existing definition to a new entry.
$definition
->setLazy(FALSE);
// Ensure that the service is accessible.
$definition
->setPublic(TRUE);
$new_service_id = 'drupal.proxy_original_service.' . $service_id;
$container
->setDefinition($new_service_id, $definition);
$container
->register($service_id, $proxy_class)
->setArguments([
new Reference('service_container'),
$new_service_id,
]);
}
else {
$class_name = $definition
->getClass();
// Find the root namespace.
$match = [];
preg_match('/([a-zA-Z0-9_]+\\\\[a-zA-Z0-9_]+)\\\\(.+)/', $class_name, $match);
$root_namespace = $match[1];
// Find the root namespace path.
$root_namespace_dir = '[namespace_root_path]';
$namespaces = $container
->getParameter('container.namespaces');
// Hardcode Drupal Core, because it is not registered.
$namespaces['Drupal\\Core'] = 'core/lib/Drupal/Core';
if (isset($namespaces[$root_namespace])) {
$root_namespace_dir = $namespaces[$root_namespace];
}
$message = <<<EOF
Missing proxy class '{<span class="php-variable">$proxy_class</span>}' for lazy service '{<span class="php-variable">$service_id</span>}'.
Use the following command to generate the proxy class:
php core/scripts/generate-proxy-class.php '{<span class="php-variable">$class_name</span>}' "{<span class="php-variable">$root_namespace_dir</span>}"
EOF;
trigger_error($message, E_USER_WARNING);
}
}
}
}