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

Breadcrumb

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

class Kernel

The Kernel is the heart of the Symfony system.

It manages an environment made of bundles.

Environment names must always start with a letter and they must only contain letters and numbers.

@author Fabien Potencier <fabien@symfony.com>

Hierarchy

  • class \Symfony\Component\HttpKernel\Kernel implements \Symfony\Component\HttpKernel\KernelInterface, \Symfony\Component\HttpKernel\RebootableInterface, \Symfony\Component\HttpKernel\TerminableInterface

Expanded class hierarchy of Kernel

3 files declare their use of Kernel
AddAnnotatedClassesToCachePass.php in vendor/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php
ConfigDataCollector.php in vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php
RouterListener.php in vendor/symfony/http-kernel/EventListener/RouterListener.php
14 string references to 'Kernel'
DevelopmentSettingsForm::create in core/modules/system/src/Form/DevelopmentSettingsForm.php
Instantiates a new instance of this class.
DrupalAutoloader::registerExtensionTestNamespace in vendor/mglaman/phpstan-drupal/src/Drupal/DrupalAutoloader.php
DrupalKernel::attachSynthetic in core/lib/Drupal/Core/DrupalKernel.php
Attach synthetic values on to kernel.
DrupalKernel::compileContainer in core/lib/Drupal/Core/DrupalKernel.php
Compiles a new service container.
DrupalKernel::resetContainer in core/lib/Drupal/Core/DrupalKernel.php
Force a container reset.

... See full list

File

vendor/symfony/http-kernel/Kernel.php, line 55

Namespace

Symfony\Component\HttpKernel
View source
abstract class Kernel implements KernelInterface, RebootableInterface, TerminableInterface {
    
    /**
     * @var array<string, BundleInterface>
     */
    protected array $bundles = [];
    protected ?ContainerInterface $container = null;
    protected bool $booted = false;
    protected ?float $startTime = null;
    private string $projectDir;
    private ?string $warmupDir = null;
    private int $requestStackSize = 0;
    private bool $resetServices = false;
    
    /**
     * @var array<string, bool>
     */
    private static array $freshCache = [];
    public const VERSION = '7.2.0';
    public const VERSION_ID = 70200;
    public const MAJOR_VERSION = 7;
    public const MINOR_VERSION = 2;
    public const RELEASE_VERSION = 0;
    public const EXTRA_VERSION = '';
    public const END_OF_MAINTENANCE = '07/2025';
    public const END_OF_LIFE = '07/2025';
    public function __construct(string $environment, bool $debug) {
        if (!$environment) {
            throw new \InvalidArgumentException(\sprintf('Invalid environment provided to "%s": the environment cannot be empty.', get_debug_type($this)));
        }
    }
    public function __clone() {
        $this->booted = false;
        $this->container = null;
        $this->requestStackSize = 0;
        $this->resetServices = false;
    }
    public function boot() : void {
        if (true === $this->booted) {
            if (!$this->requestStackSize && $this->resetServices) {
                if ($this->container
                    ->has('services_resetter')) {
                    $this->container
                        ->get('services_resetter')
                        ->reset();
                }
                $this->resetServices = false;
                if ($this->debug) {
                    $this->startTime = microtime(true);
                }
            }
            return;
        }
        if (null === $this->container) {
            $this->preBoot();
        }
        foreach ($this->getBundles() as $bundle) {
            $bundle->setContainer($this->container);
            $bundle->boot();
        }
        $this->booted = true;
    }
    public function reboot(?string $warmupDir) : void {
        $this->shutdown();
        $this->warmupDir = $warmupDir;
        $this->boot();
    }
    public function terminate(Request $request, Response $response) : void {
        if (false === $this->booted) {
            return;
        }
        if ($this->getHttpKernel() instanceof TerminableInterface) {
            $this->getHttpKernel()
                ->terminate($request, $response);
        }
    }
    public function shutdown() : void {
        if (false === $this->booted) {
            return;
        }
        $this->booted = false;
        foreach ($this->getBundles() as $bundle) {
            $bundle->shutdown();
            $bundle->setContainer(null);
        }
        $this->container = null;
        $this->requestStackSize = 0;
        $this->resetServices = false;
    }
    public function handle(Request $request, int $type = HttpKernelInterface::MAIN_REQUEST, bool $catch = true) : Response {
        if (!$this->booted) {
            $container = $this->container ?? $this->preBoot();
            if ($container->has('http_cache')) {
                return $container->get('http_cache')
                    ->handle($request, $type, $catch);
            }
        }
        $this->boot();
        ++$this->requestStackSize;
        $this->resetServices = true;
        try {
            return $this->getHttpKernel()
                ->handle($request, $type, $catch);
        } finally {
            --$this->requestStackSize;
        }
    }
    
    /**
     * Gets an HTTP kernel from the container.
     */
    protected function getHttpKernel() : HttpKernelInterface {
        return $this->container
            ->get('http_kernel');
    }
    public function getBundles() : array {
        return $this->bundles;
    }
    public function getBundle(string $name) : BundleInterface {
        if (!isset($this->bundles[$name])) {
            throw new \InvalidArgumentException(\sprintf('Bundle "%s" does not exist or it is not enabled. Maybe you forgot to add it in the "registerBundles()" method of your "%s.php" file?', $name, get_debug_type($this)));
        }
        return $this->bundles[$name];
    }
    public function locateResource(string $name) : string {
        if ('@' !== $name[0]) {
            throw new \InvalidArgumentException(\sprintf('A resource name must start with @ ("%s" given).', $name));
        }
        if (str_contains($name, '..')) {
            throw new \RuntimeException(\sprintf('File name "%s" contains invalid characters (..).', $name));
        }
        $bundleName = substr($name, 1);
        $path = '';
        if (str_contains($bundleName, '/')) {
            [
                $bundleName,
                $path,
            ] = explode('/', $bundleName, 2);
        }
        $bundle = $this->getBundle($bundleName);
        if (file_exists($file = $bundle->getPath() . '/' . $path)) {
            return $file;
        }
        throw new \InvalidArgumentException(\sprintf('Unable to find file "%s".', $name));
    }
    public function getEnvironment() : string {
        return $this->environment;
    }
    public function isDebug() : bool {
        return $this->debug;
    }
    
    /**
     * Gets the application root dir (path of the project's composer file).
     */
    public function getProjectDir() : string {
        if (!isset($this->projectDir)) {
            $r = new \ReflectionObject($this);
            if (!is_file($dir = $r->getFileName())) {
                throw new \LogicException(\sprintf('Cannot auto-detect project dir for kernel of class "%s".', $r->name));
            }
            $dir = $rootDir = \dirname($dir);
            while (!is_file($dir . '/composer.json')) {
                if ($dir === \dirname($dir)) {
                    return $this->projectDir = $rootDir;
                }
                $dir = \dirname($dir);
            }
            $this->projectDir = $dir;
        }
        return $this->projectDir;
    }
    public function getContainer() : ContainerInterface {
        if (!$this->container) {
            throw new \LogicException('Cannot retrieve the container from a non-booted kernel.');
        }
        return $this->container;
    }
    
    /**
     * @internal
     *
     * @deprecated since Symfony 7.1, to be removed in 8.0
     */
    public function setAnnotatedClassCache(array $annotatedClasses) : void {
        trigger_deprecation('symfony/http-kernel', '7.1', 'The "%s()" method is deprecated since Symfony 7.1 and will be removed in 8.0.', __METHOD__);
        file_put_contents(($this->warmupDir ?: $this->getBuildDir()) . '/annotations.map', \sprintf('<?php return %s;', var_export($annotatedClasses, true)));
    }
    public function getStartTime() : float {
        return $this->debug && null !== $this->startTime ? $this->startTime : -\INF;
    }
    public function getCacheDir() : string {
        return $this->getProjectDir() . '/var/cache/' . $this->environment;
    }
    public function getBuildDir() : string {
        // Returns $this->getCacheDir() for backward compatibility
        return $this->getCacheDir();
    }
    public function getLogDir() : string {
        return $this->getProjectDir() . '/var/log';
    }
    public function getCharset() : string {
        return 'UTF-8';
    }
    
    /**
     * Gets the patterns defining the classes to parse and cache for annotations.
     *
     * @return string[]
     *
     * @deprecated since Symfony 7.1, to be removed in 8.0
     */
    public function getAnnotatedClassesToCompile() : array {
        trigger_deprecation('symfony/http-kernel', '7.1', 'The "%s()" method is deprecated since Symfony 7.1 and will be removed in 8.0.', __METHOD__);
        return [];
    }
    
    /**
     * Initializes bundles.
     *
     * @throws \LogicException if two bundles share a common name
     */
    protected function initializeBundles() : void {
        // init bundles
        $this->bundles = [];
        foreach ($this->registerBundles() as $bundle) {
            $name = $bundle->getName();
            if (isset($this->bundles[$name])) {
                throw new \LogicException(\sprintf('Trying to register two bundles with the same name "%s".', $name));
            }
            $this->bundles[$name] = $bundle;
        }
    }
    
    /**
     * The extension point similar to the Bundle::build() method.
     *
     * Use this method to register compiler passes and manipulate the container during the building process.
     */
    protected function build(ContainerBuilder $container) : void {
    }
    
    /**
     * Gets the container class.
     *
     * @throws \InvalidArgumentException If the generated classname is invalid
     */
    protected function getContainerClass() : string {
        $class = static::class;
        $class = str_contains($class, "@anonymous\x00") ? get_parent_class($class) . str_replace('.', '_', ContainerBuilder::hash($class)) : $class;
        $class = str_replace('\\', '_', $class) . ucfirst($this->environment) . ($this->debug ? 'Debug' : '') . 'Container';
        if (!preg_match('/^[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*$/', $class)) {
            throw new \InvalidArgumentException(\sprintf('The environment "%s" contains invalid characters, it can only contain characters allowed in PHP class names.', $this->environment));
        }
        return $class;
    }
    
    /**
     * Gets the container's base class.
     *
     * All names except Container must be fully qualified.
     */
    protected function getContainerBaseClass() : string {
        return 'Container';
    }
    
    /**
     * Initializes the service container.
     *
     * The built version of the service container is used when fresh, otherwise the
     * container is built.
     */
    protected function initializeContainer() : void {
        $class = $this->getContainerClass();
        $buildDir = $this->warmupDir ?: $this->getBuildDir();
        $skip = $_SERVER['SYMFONY_DISABLE_RESOURCE_TRACKING'] ?? '';
        $skip = filter_var($skip, \FILTER_VALIDATE_BOOLEAN, \FILTER_NULL_ON_FAILURE) ?? explode(',', $skip);
        $cache = new ConfigCache($buildDir . '/' . $class . '.php', $this->debug, null, \is_array($skip) && [
            '*',
        ] !== $skip ? $skip : ($skip ? [] : null));
        $cachePath = $cache->getPath();
        // Silence E_WARNING to ignore "include" failures - don't use "@" to prevent silencing fatal errors
        $errorLevel = error_reporting(\E_ALL ^ \E_WARNING);
        try {
            if (is_file($cachePath) && \is_object($this->container = (include $cachePath)) && (!$this->debug || (self::$freshCache[$cachePath] ?? $cache->isFresh()))) {
                self::$freshCache[$cachePath] = true;
                $this->container
                    ->set('kernel', $this);
                error_reporting($errorLevel);
                return;
            }
        } catch (\Throwable $e) {
        }
        $oldContainer = \is_object($this->container) ? new \ReflectionClass($this->container) : ($this->container = null);
        try {
            is_dir($buildDir) ?: mkdir($buildDir, 0777, true);
            if ($lock = fopen($cachePath . '.lock', 'w+')) {
                if (!flock($lock, \LOCK_EX | \LOCK_NB, $wouldBlock) && !flock($lock, $wouldBlock ? \LOCK_SH : \LOCK_EX)) {
                    fclose($lock);
                    $lock = null;
                }
                elseif (!is_file($cachePath) || !\is_object($this->container = (include $cachePath))) {
                    $this->container = null;
                }
                elseif (!$oldContainer || $this->container::class !== $oldContainer->name) {
                    flock($lock, \LOCK_UN);
                    fclose($lock);
                    $this->container
                        ->set('kernel', $this);
                    return;
                }
            }
        } catch (\Throwable $e) {
        } finally {
            error_reporting($errorLevel);
        }
        if ($collectDeprecations = $this->debug && !\defined('PHPUNIT_COMPOSER_INSTALL')) {
            $collectedLogs = [];
            $previousHandler = set_error_handler(function ($type, $message, $file, $line) use (&$collectedLogs, &$previousHandler) {
                if (\E_USER_DEPRECATED !== $type && \E_DEPRECATED !== $type) {
                    return $previousHandler ? $previousHandler($type, $message, $file, $line) : false;
                }
                if (isset($collectedLogs[$message])) {
                    ++$collectedLogs[$message]['count'];
                    return null;
                }
                $backtrace = debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS, 5);
                // Clean the trace by removing first frames added by the error handler itself.
                for ($i = 0; isset($backtrace[$i]); ++$i) {
                    if (isset($backtrace[$i]['file'], $backtrace[$i]['line']) && $backtrace[$i]['line'] === $line && $backtrace[$i]['file'] === $file) {
                        $backtrace = \array_slice($backtrace, 1 + $i);
                        break;
                    }
                }
                for ($i = 0; isset($backtrace[$i]); ++$i) {
                    if (!isset($backtrace[$i]['file'], $backtrace[$i]['line'], $backtrace[$i]['function'])) {
                        continue;
                    }
                    if (!isset($backtrace[$i]['class']) && 'trigger_deprecation' === $backtrace[$i]['function']) {
                        $file = $backtrace[$i]['file'];
                        $line = $backtrace[$i]['line'];
                        $backtrace = \array_slice($backtrace, 1 + $i);
                        break;
                    }
                }
                // Remove frames added by DebugClassLoader.
                for ($i = \count($backtrace) - 2; 0 < $i; --$i) {
                    if (DebugClassLoader::class === ($backtrace[$i]['class'] ?? null)) {
                        $backtrace = [
                            $backtrace[$i + 1],
                        ];
                        break;
                    }
                }
                $collectedLogs[$message] = [
                    'type' => $type,
                    'message' => $message,
                    'file' => $file,
                    'line' => $line,
                    'trace' => [
                        $backtrace[0],
                    ],
                    'count' => 1,
                ];
                return null;
            });
        }
        try {
            $container = null;
            $container = $this->buildContainer();
            $container->compile();
        } finally {
            if ($collectDeprecations) {
                restore_error_handler();
                @file_put_contents($buildDir . '/' . $class . 'Deprecations.log', serialize(array_values($collectedLogs)));
                @file_put_contents($buildDir . '/' . $class . 'Compiler.log', null !== $container ? implode("\n", $container->getCompiler()
                    ->getLog()) : '');
            }
        }
        $this->dumpContainer($cache, $container, $class, $this->getContainerBaseClass());
        if ($lock) {
            flock($lock, \LOCK_UN);
            fclose($lock);
        }
        $this->container = (require $cachePath);
        $this->container
            ->set('kernel', $this);
        if ($oldContainer && $this->container::class !== $oldContainer->name) {
            // Because concurrent requests might still be using them,
            // old container files are not removed immediately,
            // but on a next dump of the container.
            static $legacyContainers = [];
            $oldContainerDir = \dirname($oldContainer->getFileName());
            $legacyContainers[$oldContainerDir . '.legacy'] = true;
            foreach (glob(\dirname($oldContainerDir) . \DIRECTORY_SEPARATOR . '*.legacy', \GLOB_NOSORT) as $legacyContainer) {
                if (!isset($legacyContainers[$legacyContainer]) && @unlink($legacyContainer)) {
                    (new Filesystem())->remove(substr($legacyContainer, 0, -7));
                }
            }
            touch($oldContainerDir . '.legacy');
        }
        $buildDir = $this->container
            ->getParameter('kernel.build_dir');
        $cacheDir = $this->container
            ->getParameter('kernel.cache_dir');
        $preload = $this instanceof WarmableInterface ? $this->warmUp($cacheDir, $buildDir) : [];
        if ($this->container
            ->has('cache_warmer')) {
            $cacheWarmer = $this->container
                ->get('cache_warmer');
            if ($cacheDir !== $buildDir) {
                $cacheWarmer->enableOptionalWarmers();
            }
            $preload = array_merge($preload, $cacheWarmer->warmUp($cacheDir, $buildDir));
        }
        if ($preload && file_exists($preloadFile = $buildDir . '/' . $class . '.preload.php')) {
            Preloader::append($preloadFile, $preload);
        }
    }
    
    /**
     * Returns the kernel parameters.
     *
     * @return array<string, array|bool|string|int|float|\UnitEnum|null>
     */
    protected function getKernelParameters() : array {
        $bundles = [];
        $bundlesMetadata = [];
        foreach ($this->bundles as $name => $bundle) {
            $bundles[$name] = $bundle::class;
            $bundlesMetadata[$name] = [
                'path' => $bundle->getPath(),
                'namespace' => $bundle->getNamespace(),
            ];
        }
        return [
            'kernel.project_dir' => realpath($this->getProjectDir()) ?: $this->getProjectDir(),
            'kernel.environment' => $this->environment,
            'kernel.runtime_environment' => '%env(default:kernel.environment:APP_RUNTIME_ENV)%',
            'kernel.runtime_mode' => '%env(query_string:default:container.runtime_mode:APP_RUNTIME_MODE)%',
            'kernel.runtime_mode.web' => '%env(bool:default::key:web:default:kernel.runtime_mode:)%',
            'kernel.runtime_mode.cli' => '%env(not:default:kernel.runtime_mode.web:)%',
            'kernel.runtime_mode.worker' => '%env(bool:default::key:worker:default:kernel.runtime_mode:)%',
            'kernel.debug' => $this->debug,
            'kernel.build_dir' => realpath($buildDir = $this->warmupDir ?: $this->getBuildDir()) ?: $buildDir,
            'kernel.cache_dir' => realpath($cacheDir = $this->getCacheDir() === $this->getBuildDir() ? $this->warmupDir ?: $this->getCacheDir() : $this->getCacheDir()) ?: $cacheDir,
            'kernel.logs_dir' => realpath($this->getLogDir()) ?: $this->getLogDir(),
            'kernel.bundles' => $bundles,
            'kernel.bundles_metadata' => $bundlesMetadata,
            'kernel.charset' => $this->getCharset(),
            'kernel.container_class' => $this->getContainerClass(),
        ];
    }
    
    /**
     * Builds the service container.
     *
     * @throws \RuntimeException
     */
    protected function buildContainer() : ContainerBuilder {
        foreach ([
            'cache' => $this->getCacheDir(),
            'build' => $this->warmupDir ?: $this->getBuildDir(),
            'logs' => $this->getLogDir(),
        ] as $name => $dir) {
            if (!is_dir($dir)) {
                if (false === @mkdir($dir, 0777, true) && !is_dir($dir)) {
                    throw new \RuntimeException(\sprintf('Unable to create the "%s" directory (%s).', $name, $dir));
                }
            }
            elseif (!is_writable($dir)) {
                throw new \RuntimeException(\sprintf('Unable to write in the "%s" directory (%s).', $name, $dir));
            }
        }
        $container = $this->getContainerBuilder();
        $container->addObjectResource($this);
        $this->prepareContainer($container);
        $this->registerContainerConfiguration($this->getContainerLoader($container));
        return $container;
    }
    
    /**
     * Prepares the ContainerBuilder before it is compiled.
     */
    protected function prepareContainer(ContainerBuilder $container) : void {
        $extensions = [];
        foreach ($this->bundles as $bundle) {
            if ($extension = $bundle->getContainerExtension()) {
                $container->registerExtension($extension);
            }
            if ($this->debug) {
                $container->addObjectResource($bundle);
            }
        }
        foreach ($this->bundles as $bundle) {
            $bundle->build($container);
        }
        $this->build($container);
        foreach ($container->getExtensions() as $extension) {
            $extensions[] = $extension->getAlias();
        }
        // ensure these extensions are implicitly loaded
        $container->getCompilerPassConfig()
            ->setMergePass(new MergeExtensionConfigurationPass($extensions));
    }
    
    /**
     * Gets a new ContainerBuilder instance used to build the service container.
     */
    protected function getContainerBuilder() : ContainerBuilder {
        $container = new ContainerBuilder();
        $container->getParameterBag()
            ->add($this->getKernelParameters());
        if ($this instanceof ExtensionInterface) {
            $container->registerExtension($this);
        }
        if ($this instanceof CompilerPassInterface) {
            $container->addCompilerPass($this, PassConfig::TYPE_BEFORE_OPTIMIZATION, -10000);
        }
        return $container;
    }
    
    /**
     * Dumps the service container to PHP code in the cache.
     *
     * @param string $class     The name of the class to generate
     * @param string $baseClass The name of the container's base class
     */
    protected function dumpContainer(ConfigCache $cache, ContainerBuilder $container, string $class, string $baseClass) : void {
        // cache the container
        $dumper = new PhpDumper($container);
        $buildParameters = [];
        foreach ($container->getCompilerPassConfig()
            ->getPasses() as $pass) {
            if ($pass instanceof RemoveBuildParametersPass) {
                $buildParameters = array_merge($buildParameters, $pass->getRemovedParameters());
            }
        }
        $content = $dumper->dump([
            'class' => $class,
            'base_class' => $baseClass,
            'file' => $cache->getPath(),
            'as_files' => true,
            'debug' => $this->debug,
            'inline_factories' => $buildParameters['.container.dumper.inline_factories'] ?? false,
            'inline_class_loader' => $buildParameters['.container.dumper.inline_class_loader'] ?? $this->debug,
            'build_time' => $container->hasParameter('kernel.container_build_time') ? $container->getParameter('kernel.container_build_time') : time(),
            'preload_classes' => array_map('get_class', $this->bundles),
        ]);
        $rootCode = array_pop($content);
        $dir = \dirname($cache->getPath()) . '/';
        $fs = new Filesystem();
        foreach ($content as $file => $code) {
            $fs->dumpFile($dir . $file, $code);
            @chmod($dir . $file, 0666 & ~umask());
        }
        $legacyFile = \dirname($dir . key($content)) . '.legacy';
        if (is_file($legacyFile)) {
            @unlink($legacyFile);
        }
        $cache->write($rootCode, $container->getResources());
    }
    
    /**
     * Returns a loader for the container.
     */
    protected function getContainerLoader(ContainerInterface $container) : DelegatingLoader {
        $env = $this->getEnvironment();
        $locator = new FileLocator($this);
        $resolver = new LoaderResolver([
            new XmlFileLoader($container, $locator, $env),
            new YamlFileLoader($container, $locator, $env),
            new IniFileLoader($container, $locator, $env),
            new PhpFileLoader($container, $locator, $env, class_exists(ConfigBuilderGenerator::class) ? new ConfigBuilderGenerator($this->getBuildDir()) : null),
            new GlobFileLoader($container, $locator, $env),
            new DirectoryLoader($container, $locator, $env),
            new ClosureLoader($container, $env),
        ]);
        return new DelegatingLoader($resolver);
    }
    private function preBoot() : ContainerInterface {
        if ($this->debug) {
            $this->startTime = microtime(true);
        }
        if ($this->debug && !isset($_ENV['SHELL_VERBOSITY']) && !isset($_SERVER['SHELL_VERBOSITY'])) {
            if (\function_exists('putenv')) {
                putenv('SHELL_VERBOSITY=3');
            }
            $_ENV['SHELL_VERBOSITY'] = 3;
            $_SERVER['SHELL_VERBOSITY'] = 3;
        }
        $this->initializeBundles();
        $this->initializeContainer();
        $container = $this->container;
        if ($container->hasParameter('kernel.trusted_hosts') && ($trustedHosts = $container->getParameter('kernel.trusted_hosts'))) {
            Request::setTrustedHosts(\is_array($trustedHosts) ? $trustedHosts : preg_split('/\\s*+,\\s*+(?![^{]*})/', $trustedHosts));
        }
        if ($container->hasParameter('kernel.trusted_proxies') && $container->hasParameter('kernel.trusted_headers') && ($trustedProxies = $container->getParameter('kernel.trusted_proxies'))) {
            $trustedHeaders = $container->getParameter('kernel.trusted_headers');
            if (\is_string($trustedHeaders)) {
                $trustedHeaders = array_map('trim', explode(',', $trustedHeaders));
            }
            if (\is_array($trustedHeaders)) {
                $trustedHeaderSet = 0;
                foreach ($trustedHeaders as $header) {
                    if (!\defined($const = Request::class . '::HEADER_' . strtr(strtoupper($header), '-', '_'))) {
                        throw new \InvalidArgumentException(\sprintf('The trusted header "%s" is not supported.', $header));
                    }
                    $trustedHeaderSet |= \constant($const);
                }
            }
            else {
                $trustedHeaderSet = $trustedHeaders ?? Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO;
            }
            Request::setTrustedProxies(\is_array($trustedProxies) ? $trustedProxies : array_map('trim', explode(',', $trustedProxies)), $trustedHeaderSet);
        }
        return $container;
    }
    public function __sleep() : array {
        return [
            'environment',
            'debug',
        ];
    }
    public function __wakeup() : void {
        if (\is_object($this->environment) || \is_object($this->debug)) {
            throw new \BadMethodCallException('Cannot unserialize ' . __CLASS__);
        }
        $this->__construct($this->environment, $this->debug);
    }

}

Members

Title Sort descending Deprecated Modifiers Object type Summary Overriden Title
HttpKernelInterface::MAIN_REQUEST public constant
HttpKernelInterface::SUB_REQUEST public constant
Kernel::$booted protected property
Kernel::$bundles protected property
Kernel::$container protected property
Kernel::$freshCache private static property
Kernel::$projectDir private property
Kernel::$requestStackSize private property
Kernel::$resetServices private property
Kernel::$startTime protected property
Kernel::$warmupDir private property
Kernel::boot public function Boots the current kernel. Overrides KernelInterface::boot
Kernel::build protected function The extension point similar to the Bundle::build() method.
Kernel::buildContainer protected function Builds the service container.
Kernel::dumpContainer protected function Dumps the service container to PHP code in the cache.
Kernel::END_OF_LIFE public constant
Kernel::END_OF_MAINTENANCE public constant
Kernel::EXTRA_VERSION public constant
Kernel::getAnnotatedClassesToCompile Deprecated public function Gets the patterns defining the classes to parse and cache for annotations.
Kernel::getBuildDir public function Returns the build directory. Overrides KernelInterface::getBuildDir
Kernel::getBundle public function Returns a bundle. Overrides KernelInterface::getBundle
Kernel::getBundles public function Gets the registered bundle instances. Overrides KernelInterface::getBundles
Kernel::getCacheDir public function Gets the cache directory. Overrides KernelInterface::getCacheDir
Kernel::getCharset public function Gets the charset of the application. Overrides KernelInterface::getCharset
Kernel::getContainer public function Gets the current container. Overrides KernelInterface::getContainer
Kernel::getContainerBaseClass protected function Gets the container&#039;s base class.
Kernel::getContainerBuilder protected function Gets a new ContainerBuilder instance used to build the service container.
Kernel::getContainerClass protected function Gets the container class.
Kernel::getContainerLoader protected function Returns a loader for the container.
Kernel::getEnvironment public function Gets the environment. Overrides KernelInterface::getEnvironment
Kernel::getHttpKernel protected function Gets an HTTP kernel from the container.
Kernel::getKernelParameters protected function Returns the kernel parameters.
Kernel::getLogDir public function Gets the log directory. Overrides KernelInterface::getLogDir
Kernel::getProjectDir public function Gets the application root dir (path of the project&#039;s composer file). Overrides KernelInterface::getProjectDir
Kernel::getStartTime public function Gets the request start time (not available if debug is disabled). Overrides KernelInterface::getStartTime
Kernel::handle public function Handles a Request to convert it to a Response. Overrides HttpKernelInterface::handle
Kernel::initializeBundles protected function Initializes bundles.
Kernel::initializeContainer protected function Initializes the service container.
Kernel::isDebug public function Checks if debug mode is enabled. Overrides KernelInterface::isDebug
Kernel::locateResource public function Returns the file path for a given bundle resource. Overrides KernelInterface::locateResource
Kernel::MAJOR_VERSION public constant
Kernel::MINOR_VERSION public constant
Kernel::preBoot private function
Kernel::prepareContainer protected function Prepares the ContainerBuilder before it is compiled.
Kernel::reboot public function Reboots a kernel. Overrides RebootableInterface::reboot
Kernel::RELEASE_VERSION public constant
Kernel::setAnnotatedClassCache Deprecated public function @internal
Kernel::shutdown public function Shutdowns the kernel. Overrides KernelInterface::shutdown
Kernel::terminate public function Terminates a request/response cycle. Overrides TerminableInterface::terminate
Kernel::VERSION public constant
Kernel::VERSION_ID public constant
Kernel::__clone public function
Kernel::__construct public function
Kernel::__sleep public function
Kernel::__wakeup public function
KernelInterface::registerBundles public function Returns an array of bundles to register.
KernelInterface::registerContainerConfiguration public function Loads the container configuration.

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal