function PhpDumper::startClass
1 call to PhpDumper::startClass()
- 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 1237
Class
- PhpDumper
- PhpDumper dumps a service container as a PHP class.
Namespace
Symfony\Component\DependencyInjection\DumperCode
private function startClass(string $class, string $baseClass, bool $hasProxyClasses) : string {
$namespaceLine = !$this->asFiles && $this->namespace ? "\nnamespace {$this->namespace};\n" : '';
$code = <<<EOF
<?php
{<span class="php-variable">$namespaceLine</span>}
use Symfony\\Component\\DependencyInjection\\Argument\\RewindableGenerator;
use Symfony\\Component\\DependencyInjection\\ContainerInterface;
use Symfony\\Component\\DependencyInjection\\Container;
use Symfony\\Component\\DependencyInjection\\Exception\\LogicException;
use Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException;
use Symfony\\Component\\DependencyInjection\\Exception\\RuntimeException;
use Symfony\\Component\\DependencyInjection\\ParameterBag\\FrozenParameterBag;
use Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBagInterface;
/*{<span class="php-variable">$this</span>-><span class="php-function-or-constant property member-of-self">docStar</span>}
* @internal This class has been auto-generated by the Symfony Dependency Injection Component.
*/
class {<span class="php-variable">$class</span>} extends {<span class="php-variable">$baseClass</span>}
{
private const DEPRECATED_PARAMETERS = [];
private const NONEMPTY_PARAMETERS = [];
protected \$parameters = [];
public function __construct()
{
EOF;
$code = str_replace(" private const DEPRECATED_PARAMETERS = [];\n\n", $this->addDeprecatedParameters(), $code);
$code = str_replace(" private const NONEMPTY_PARAMETERS = [];\n\n", $this->addNonEmptyParameters(), $code);
if ($this->asFiles) {
$code = str_replace('__construct()', '__construct(private array $buildParameters = [], protected string $containerDir = __DIR__)', $code);
if (null !== $this->targetDirRegex) {
$code = str_replace('$parameters = []', "\$targetDir;\n protected \$parameters = []", $code);
$code .= ' $this->targetDir = \\dirname($containerDir);' . "\n";
}
}
if (Container::class !== $this->baseClass) {
$r = $this->container
->getReflectionClass($this->baseClass, false);
if (null !== $r && null !== ($constructor = $r->getConstructor()) && 0 === $constructor->getNumberOfRequiredParameters() && Container::class !== $constructor->getDeclaringClass()->name) {
$code .= " parent::__construct();\n";
$code .= " \$this->parameterBag = null;\n\n";
}
}
if ($this->container
->getParameterBag()
->all()) {
$code .= " \$this->parameters = \$this->getDefaultParameters();\n\n";
}
$code .= " \$this->services = \$this->privates = [];\n";
$code .= $this->addSyntheticIds();
$code .= $this->addMethodMap();
$code .= $this->asFiles && !$this->inlineFactories ? $this->addFileMap() : '';
$code .= $this->addAliases();
$code .= $this->addInlineRequires($hasProxyClasses);
$code .= <<<EOF
}
public function compile(): void
{
throw new LogicException('You cannot compile a dumped container that was already compiled.');
}
public function isCompiled(): bool
{
return true;
}
EOF;
$code .= $this->addRemovedIds();
if ($this->asFiles && !$this->inlineFactories) {
$code .= <<<'EOF'
protected function load($file, $lazyLoad = true): mixed
{
if (class_exists($class = __NAMESPACE__.'\\'.$file, false)) {
return $class::do($this, $lazyLoad);
}
if ('.' === $file[-4]) {
$class = substr($class, 0, -4);
} else {
$file .= '.php';
}
$service = require $this->containerDir.\DIRECTORY_SEPARATOR.$file;
return class_exists($class, false) ? $class::do($this, $lazyLoad) : $service;
}
EOF;
}
foreach ($this->container
->getDefinitions() as $definition) {
if (!$definition->isLazy() || !$this->hasProxyDumper) {
continue;
}
if ($this->asFiles && !$this->inlineFactories) {
$proxyLoader = "class_exists(\$class, false) || require __DIR__.'/'.\$class.'.php';\n\n ";
}
else {
$proxyLoader = '';
}
$code .= <<<EOF
protected function createProxy(\$class, \\Closure \$factory)
{
{<span class="php-variable">$proxyLoader</span>}return \$factory();
}
EOF;
break;
}
return $code;
}