/** * Constructs the expected class output. * * @param string $expected_methods_body * The expected body of decorated methods. * * @return string * The code of the entire proxy. */ protected function buildExpectedClass($class, $expected_methods_body, $interface_string = '') { $proxy_class = $this->proxyBuilder->buildProxyClassName($class); $expected_string = <<<'EOS' /** * Provides a proxy class for \{{ class }}. * * @see \Drupal\Component\ProxyBuilder */ class {{ proxy_class }}{{ interface_string }} { use \Drupal\Core\DependencyInjection\DependencySerializationTrait; /** * @var string */ protected $serviceId; /** * @var \{{ class }} */ protected $service; /** * The service container. * * @var \Symfony\Component\DependencyInjection\ContainerInterface */ protected $container; public function __construct(\Symfony\Component\DependencyInjection\ContainerInterface $container, $serviceId) { $this->container = $container; $this->serviceId = $serviceId; } protected function lazyLoadItself() { if (!isset($this->service)) { $method_name = 'get' . Container::camelize($this->serviceId) . 'Service'; $this->service = $this->container->$method_name(false); } return $this->service; } {{ expected_methods_body }} } EOS; $expected_string = str_replace('{{ proxy_class }}', $proxy_class, $expected_string); $expected_string = str_replace('{{ class }}', $class, $expected_string); $expected_string = str_replace('{{ expected_methods_body }}', $expected_methods_body, $expected_string); $expected_string = str_replace('{{ interface_string }}', $interface_string, $expected_string); return $expected_string; }
/** * Constructs the expected class output. * * @param string $expected_methods_body * The expected body of decorated methods. * * @return string * The code of the entire proxy. */ protected function buildExpectedClass($class, $expected_methods_body, $interface_string = '') { $reflection = new \ReflectionClass($class); $namespace = ProxyBuilder::buildProxyNamespace($class); $proxy_class = $reflection->getShortName(); $expected_string = <<<'EOS' namespace {{ namespace }} { /** * Provides a proxy class for \{{ class }}. * * @see \Drupal\Component\ProxyBuilder */ class {{ proxy_class }}{{ interface_string }} { use \Drupal\Core\DependencyInjection\DependencySerializationTrait; /** * The id of the original proxied service. * * @var string */ protected $drupalProxyOriginalServiceId; /** * The real proxied service, after it was lazy loaded. * * @var \{{ class }} */ protected $service; /** * The service container. * * @var \Symfony\Component\DependencyInjection\ContainerInterface */ protected $container; /** * Constructs a ProxyClass Drupal proxy object. * * @param \Symfony\Component\DependencyInjection\ContainerInterface $container * The container. * @param string $drupal_proxy_original_service_id * The service ID of the original service. */ public function __construct(\Symfony\Component\DependencyInjection\ContainerInterface $container, $drupal_proxy_original_service_id) { $this->container = $container; $this->drupalProxyOriginalServiceId = $drupal_proxy_original_service_id; } /** * Lazy loads the real service from the container. * * @return object * Returns the constructed real service. */ protected function lazyLoadItself() { if (!isset($this->service)) { $this->service = $this->container->get($this->drupalProxyOriginalServiceId); } return $this->service; } {{ expected_methods_body }} } } EOS; $expected_methods_body = implode("\n", array_map(function ($value) { if ($value === '') { return $value; } return " {$value}"; }, explode("\n", $expected_methods_body))); $expected_string = str_replace('{{ proxy_class }}', $proxy_class, $expected_string); $expected_string = str_replace('{{ namespace }}', $namespace, $expected_string); $expected_string = str_replace('{{ class }}', $class, $expected_string); $expected_string = str_replace('{{ expected_methods_body }}', $expected_methods_body, $expected_string); $expected_string = str_replace('{{ interface_string }}', $interface_string, $expected_string); return $expected_string; }