| Code Coverage | ||||||||||
| Classes and Traits | Functions and Methods | Lines | ||||||||
| Total |  | 0.00% | 0 / 1 |  | 0.00% | 0 / 1 | CRAP |  | 78.26% | 18 / 23 | 
| ProxyServicesPass |  | 0.00% | 0 / 1 |  | 0.00% | 0 / 1 | 5.26 |  | 78.26% | 18 / 23 | 
| process |  | 0.00% | 0 / 1 | 5.26 |  | 78.26% | 18 / 23 | |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\DependencyInjection\Compiler\ProxyServicesPass. | |
| */ | |
| namespace Drupal\Core\DependencyInjection\Compiler; | |
| use Drupal\Component\ProxyBuilder\ProxyBuilder; | |
| use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; | |
| use Symfony\Component\DependencyInjection\ContainerBuilder; | |
| use Symfony\Component\DependencyInjection\Reference; | |
| /** | |
| * Replaces all services with a lazy flag. | |
| */ | |
| class ProxyServicesPass implements CompilerPassInterface { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| 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 '$proxy_class' for lazy service '$service_id'. | |
| Use the following command to generate the proxy class: | |
| php core/scripts/generate-proxy-class.php '$class_name' "$root_namespace_dir" | |
| EOF; | |
| trigger_error($message, E_USER_WARNING); | |
| } | |
| } | |
| } | |
| } | |
| } |