Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. PhpDumper.php

function PhpDumper::generateProxyClasses

1 call to PhpDumper::generateProxyClasses()
PhpDumper::dump in vendor/symfony/dependency-injection/Dumper/PhpDumper.php
Dumps the service container as a PHP class.

File

vendor/symfony/dependency-injection/Dumper/PhpDumper.php, line 555

Class

PhpDumper
PhpDumper dumps a service container as a PHP class.

Namespace

Symfony\Component\DependencyInjection\Dumper

Code

private function generateProxyClasses() : array {
    $proxyClasses = [];
    $alreadyGenerated = [];
    $definitions = $this->container
        ->getDefinitions();
    $strip = '' === $this->docStar;
    $proxyDumper = $this->getProxyDumper();
    ksort($definitions);
    foreach ($definitions as $id => $definition) {
        if (!($definition = $this->isProxyCandidate($definition, $asGhostObject, $id))) {
            continue;
        }
        if (isset($alreadyGenerated[$asGhostObject][$class = $definition->getClass()])) {
            continue;
        }
        $alreadyGenerated[$asGhostObject][$class] = true;
        foreach (array_column($definition->getTag('proxy'), 'interface') ?: [
            $class,
        ] as $r) {
            if (!($r = $this->container
                ->getReflectionClass($r))) {
                continue;
            }
            do {
                $file = $r->getFileName();
                if (str_ends_with($file, ') : eval()\'d code')) {
                    $file = substr($file, 0, strrpos($file, '(', -17));
                }
                if (is_file($file)) {
                    $this->container
                        ->addResource(new FileResource($file));
                }
                $r = $r->getParentClass() ?: null;
            } while ($r?->isUserDefined());
        }
        if ("\n" === ($proxyCode = "\n" . $proxyDumper->getProxyCode($definition, $id))) {
            continue;
        }
        if ($this->inlineRequires) {
            $lineage = [];
            $this->collectLineage($class, $lineage);
            $code = '';
            foreach (array_diff_key(array_flip($lineage), $this->inlinedRequires) as $file => $class) {
                if ($this->inlineFactories) {
                    $this->inlinedRequires[$file] = true;
                }
                $code .= \sprintf("include_once %s;\n", $file);
            }
            $proxyCode = $code . $proxyCode;
        }
        if ($strip) {
            $proxyCode = "<?php\n" . $proxyCode;
            $proxyCode = substr(self::stripComments($proxyCode), 5);
        }
        $proxyClass = $this->inlineRequires ? substr($proxyCode, \strlen($code)) : $proxyCode;
        $i = strpos($proxyClass, 'class');
        $proxyClass = substr($proxyClass, 6 + $i, strpos($proxyClass, ' ', 7 + $i) - $i - 6);
        if ($this->asFiles || $this->namespace) {
            $proxyCode .= "\nif (!\\class_exists('{$proxyClass}', false)) {\n    \\class_alias(__NAMESPACE__.'\\\\{$proxyClass}', '{$proxyClass}', false);\n}\n";
        }
        $proxyClasses[$proxyClass . '.php'] = $proxyCode;
    }
    return $proxyClasses;
}
RSS feed
Powered by Drupal