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\DumperCode
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;
}