Skip to content
  • About
    • What is Symfony?
    • Community
    • News
    • Contributing
    • Support
  • Documentation
    • Symfony Docs
    • Symfony Book
    • Screencasts
    • Symfony Bundles
    • Symfony Cloud
    • Training
  • Services
    • Platform.sh for Symfony Best platform to deploy Symfony apps
    • SymfonyInsight Automatic quality checks for your apps
    • Symfony Certification Prove your knowledge and boost your career
    • SensioLabs Professional services to help you with Symfony
    • Blackfire Profile and monitor performance of your apps
  • Other
  • Blog
  • Download
sponsored by
  1. Home
  2. Documentation
  3. Reference
  4. Configuring in the Kernel

Configuring in the Kernel

Warning: You are browsing the documentation for Symfony 7.0, which is no longer maintained.

Read the updated version of this page for Symfony 7.1 (the current stable version).

Symfony applications define a kernel class (which is located by default at src/Kernel.php) that includes several configurable options. This article explains how to configure those options and shows the list of container parameters created by Symfony based on that configuration.

kernel.build_dir

type: string default: $this->getCacheDir()

This parameter stores the absolute path of a build directory of your Symfony application. This directory can be used to separate read-only cache (i.e. the compiled container) from read-write cache (i.e. cache pools). Specify a non-default value when the application is deployed in a read-only filesystem like a Docker container or AWS Lambda.

This value is also exposed via the getBuildDir() method of the kernel class, which you can override to return a different value.

You can also change the build directory by defining an environment variable named APP_BUILD_DIR whose value is the absolute path of the build folder.

kernel.bundles

type: array default: []

This parameter stores the list of bundles registered in the application and the FQCN of their main bundle class:

1
2
3
4
5
[
    'FrameworkBundle' => 'Symfony\Bundle\FrameworkBundle\FrameworkBundle',
    'TwigBundle' => 'Symfony\Bundle\TwigBundle\TwigBundle',
    // ...
]

This value is also exposed via the getBundles() method of the kernel class.

kernel.bundles_metadata

type: array default: []

This parameter stores the list of bundles registered in the application and some metadata about them:

1
2
3
4
5
6
7
8
9
10
11
[
    'FrameworkBundle' => [
        'path' => '/<path-to-your-project>/vendor/symfony/framework-bundle',
        'namespace' => 'Symfony\Bundle\FrameworkBundle',
    ],
    'TwigBundle' => [
        'path' => '/<path-to-your-project>/vendor/symfony/twig-bundle',
        'namespace' => 'Symfony\Bundle\TwigBundle',
    ],
    // ...
]

This value is not exposed via any method of the kernel class, so you can only obtain it via the container parameter.

kernel.cache_dir

type: string default: $this->getProjectDir()/var/cache/$this->environment

This parameter stores the absolute path of the cache directory of your Symfony application. The default value is generated by Symfony based on the current configuration environment. Your application can write data to this path at runtime.

This value is also exposed via the getCacheDir() method of the kernel class, which you can override to return a different value.

kernel.charset

type: string default: UTF-8

This parameter stores the type of charset or character encoding that is used in the application. This value is also exposed via the getCharset() method of the kernel class, which you can override to return a different value:

1
2
3
4
5
6
7
8
9
10
11
12
13
// src/Kernel.php
namespace App;

use Symfony\Component\HttpKernel\Kernel as BaseKernel;
// ...

class Kernel extends BaseKernel
{
    public function getCharset(): string
    {
        return 'ISO-8859-1';
    }
}

kernel.container_build_time

type: string default: the result of executing time()

Symfony follows the reproducible builds philosophy, which ensures that the result of compiling the exact same source code doesn't produce different results. This helps checking that a given binary or executable code was compiled from some trusted source code.

In practice, the compiled service container of your application will always be the same if you don't change its source code. This is exposed via these container parameters:

  • container.build_hash, a hash of the contents of all your source files;
  • container.build_time, a timestamp of the moment when the container was built (the result of executing PHP's time function);
  • container.build_id, the result of merging the two previous parameters and encoding the result using CRC32.

Since the container.build_time value will change every time you compile the application, the build will not be strictly reproducible. If you care about this, the solution is to use another container parameter called kernel.container_build_time and set it to a non-changing build time to achieve a strict reproducible build:

1
2
3
4
# config/services.yaml
parameters:
    # ...
    kernel.container_build_time: '1234567890'
1
2
3
4
5
6
7
8
9
10
11
<!-- config/services.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd">

    <parameters>
        <!-- ... -->
        <parameter key="kernel.container_build_time">1234567890</parameter>
    </parameters>
</container>
1
2
3
4
// config/services.php

// ...
$container->setParameter('kernel.container_build_time', '1234567890');

kernel.container_class

type: string default: (see explanation below)

This parameter stores a unique identifier for the container class. In practice, this is only important to ensure that each kernel has a unique identifier when using applications with multiple kernels.

The default value is generated by Symfony based on the current configuration environment and the debug mode. For example, if your application kernel is defined in the App namespace, runs in the dev environment and the debug mode is enabled, the value of this parameter is App_KernelDevDebugContainer.

This value is also exposed via the getContainerClass() method of the kernel class, which you can override to return a different value:

1
2
3
4
5
6
7
8
9
10
11
12
13
// src/Kernel.php
namespace App;

use Symfony\Component\HttpKernel\Kernel as BaseKernel;
// ...

class Kernel extends BaseKernel
{
    public function getContainerClass(): string
    {
        return sprintf('AcmeKernel%s', random_int(10_000, 99_999));
    }
}

kernel.debug

type: boolean default: (the value is passed as an argument when booting the kernel)

This parameter stores the value of the current debug mode used by the application.

kernel.default_locale

This parameter stores the value of the framework.default_locale parameter.

kernel.enabled_locales

This parameter stores the value of the framework.enabled_locales parameter.

kernel.environment

type: string default: (the value is passed as an argument when booting the kernel)

This parameter stores the name of the current configuration environment used by the application.

This value defines the configuration options used to run the application, whereas the kernel.runtime_environment option defines the place where the application is deployed. This allows for example to run an application with the prod config (kernel.environment) in different scenarios like staging or production (kernel.runtime_environment).

kernel.error_controller

This parameter stores the value of the framework.error_controller parameter.

kernel.http_method_override

This parameter stores the value of the framework.http_method_override parameter.

kernel.logs_dir

type: string default: $this->getProjectDir()/var/log

This parameter stores the absolute path of the log directory of your Symfony application. It's calculated automatically based on the current configuration environment.

This value is also exposed via the getLogDir() method of the kernel class, which you can override to return a different value.

kernel.project_dir

type: string default: the directory of the project's composer.json

This parameter stores the absolute path of the root directory of your Symfony application, which is used by applications to perform operations with file paths relative to the project's root directory.

By default, its value is calculated automatically as the directory where the main composer.json file is stored. This value is also exposed via the getProjectDir() method of the kernel class.

If you don't use Composer, or have moved the composer.json file location or have deleted it entirely (for example in the production servers), override the getProjectDir() method to return a different value:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// src/Kernel.php
namespace App;

use Symfony\Component\HttpKernel\Kernel as BaseKernel;
// ...

class Kernel extends BaseKernel
{
    // ...

    public function getProjectDir(): string
    {
        // when defining a hardcoded string, don't add the trailing slash to the path
        // e.g. '/home/user/my_project', '/app', '/var/www/example.com'
        return \dirname(__DIR__);
    }
}

kernel.runtime_environment

type: string default: %env(default:kernel.environment:APP_RUNTIME_ENV)%

This parameter stores the name of the current runtime environment used by the application.

This value defines the place where the application is deployed, whereas the kernel.environment option defines the configuration options used to run the application. This allows for example to run an application with the prod config (kernel.environment) in different scenarios like staging or production (kernel.runtime_environment).

kernel.runtime_mode

type: string default: %env(query_string:default:container.runtime_mode:APP_RUNTIME_MODE)%

This parameter stores a query string of the current runtime mode used by the application. For example, the query string looks like web=1&worker=0 when the application is running in web mode and web=1&worker=1 when running in a long-running web server. This parameter can be set by using the APP_RUNTIME_MODE env var.

kernel.runtime_mode.web

type: boolean default: %env(bool:default::key:web:default:kernel.runtime_mode:)%

Whether the application is running in a web environment.

kernel.runtime_mode.cli

type: boolean default: %env(not:default:kernel.runtime_mode.web:)%

Whether the application is running in a CLI environment. By default, this value is the opposite of the kernel.runtime_mode.web parameter.

kernel.runtime_mode.worker

type: boolean default: %env(bool:default::key:worker:default:kernel.runtime_mode:)%

Whether the application is running in a worker/long-running environment. Not all web servers support it, and you have to use a long-running web server like FrankenPHP.

kernel.secret

type: string default: %env(APP_SECRET)%

This parameter stores the value of the framework.secret parameter.

kernel.trust_x_sendfile_type_header

This parameter stores the value of the framework.trust_x_sendfile_type_header parameter.

kernel.trusted_hosts

This parameter stores the value of the framework.trusted_hosts parameter.

kernel.trusted_proxies

This parameter stores the value of the framework.trusted_proxies parameter.

This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.
TOC
    Version

    Symfony 7.0 is backed by

    Code consumes server resources. Blackfire tells you how

    Code consumes server resources. Blackfire tells you how

    Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).

    Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).

    Version:

    Table of Contents

    • kernel.build_dir
    • kernel.bundles
    • kernel.bundles_metadata
    • kernel.cache_dir
    • kernel.charset
    • kernel.container_build_time
    • kernel.container_class
    • kernel.debug
    • kernel.default_locale
    • kernel.enabled_locales
    • kernel.environment
    • kernel.error_controller
    • kernel.http_method_override
    • kernel.logs_dir
    • kernel.project_dir
    • kernel.runtime_environment
    • kernel.runtime_mode
    • kernel.runtime_mode.web
    • kernel.runtime_mode.cli
    • kernel.runtime_mode.worker
    • kernel.secret
    • kernel.trust_x_sendfile_type_header
    • kernel.trusted_hosts
    • kernel.trusted_proxies

    Symfony footer

    Avatar of Peter Gribanov, a Symfony contributor

    Thanks Peter Gribanov for being a Symfony contributor

    1 commit • 2 lines changed

    View all contributors that help us make Symfony

    Become a Symfony contributor

    Be an active part of the community and contribute ideas, code and bug fixes. Both experts and newcomers are welcome.

    Learn how to contribute

    Symfony™ is a trademark of Symfony SAS. All rights reserved.

    • What is Symfony?

      • What is Symfony?
      • Symfony at a Glance
      • Symfony Components
      • Symfony Releases
      • Security Policy
      • Logo & Screenshots
      • Trademark & Licenses
      • symfony1 Legacy
    • Learn Symfony

      • Symfony Docs
      • Symfony Book
      • Reference
      • Bundles
      • Best Practices
      • Training
      • eLearning Platform
      • Certification
    • Screencasts

      • Learn Symfony
      • Learn PHP
      • Learn JavaScript
      • Learn Drupal
      • Learn RESTful APIs
    • Community

      • Symfony Community
      • SymfonyConnect
      • Events & Meetups
      • Projects using Symfony
      • Contributors
      • Symfony Jobs
      • Backers
      • Code of Conduct
      • Downloads Stats
      • Support
    • Blog

      • All Blog Posts
      • A Week of Symfony
      • Case Studies
      • Cloud
      • Community
      • Conferences
      • Diversity
      • Living on the edge
      • Releases
      • Security Advisories
      • Symfony Insight
      • Twig
      • SensioLabs Blog
    • Services

      • SensioLabs services
      • Train developers
      • Manage your project quality
      • Improve your project performance
      • Host Symfony projects

      Powered by

    Follow Symfony