跳到内容

在 Kernel 中配置

编辑此页

Symfony 应用程序定义了一个内核类(默认位于 src/Kernel.php),其中包含多个可配置的选项。本文解释了如何配置这些选项,并展示了 Symfony 基于该配置创建的容器参数列表。

kernel.build_dir

类型: string 默认值: $this->getCacheDir()

此参数存储 Symfony 应用程序的构建目录的绝对路径。此目录可用于将只读缓存(即编译后的容器)与读写缓存(即 缓存池)分开。当应用程序部署在只读文件系统(如 Docker 容器或 AWS Lambda)中时,请指定非默认值。

此值也通过内核类的 getBuildDir() 方法公开,你可以重写该方法以返回不同的值。

你还可以通过定义名为 APP_BUILD_DIR 的环境变量来更改构建目录,该变量的值是构建文件夹的绝对路径。

kernel.bundles

类型: array 默认值: []

此参数存储应用程序中注册的 程序包 列表及其主程序包类的 FQCN

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

此值也通过内核类的 getBundles() 方法公开。

kernel.bundles_metadata

类型: array 默认值: []

此参数存储应用程序中注册的 程序包 列表以及关于它们的一些元数据

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',
    ],
    // ...
]

此值不通过内核类的任何方法公开,因此你只能通过容器参数获取它。

kernel.cache_dir

类型: string 默认值: $this->getProjectDir()/var/cache/$this->environment

此参数存储 Symfony 应用程序的缓存目录的绝对路径。默认值由 Symfony 基于当前的 配置环境 生成。你的应用程序可以在运行时将数据写入此路径。

此值也通过内核类的 getCacheDir() 方法公开,你可以重写该方法以返回不同的值。

kernel.charset

类型: string 默认值: UTF-8

此参数存储应用程序中使用的字符集或 字符编码 的类型。此值也通过内核类的 getCharset() 方法公开,你可以重写该方法以返回不同的值

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

类型: string 默认值: 执行 time() 的结果

Symfony 遵循 可重现构建 的理念,这确保了编译完全相同的源代码不会产生不同的结果。这有助于检查给定的二进制文件或可执行代码是否是从某些受信任的源代码编译而来的。

实际上,如果你不更改应用程序的源代码,则编译后的 服务容器 将始终相同。这通过以下容器参数公开:

  • container.build_hash,所有源文件内容的哈希值;
  • container.build_time,容器构建时刻的时间戳(执行 PHP 的 time 函数的结果);
  • container.build_id,合并前两个参数并使用 CRC32 编码结果的结果。

由于 container.build_time 值每次编译应用程序时都会更改,因此构建不会是严格可重现的。如果你关心这一点,解决方案是使用另一个名为 kernel.container_build_time 的容器参数,并将其设置为非更改的构建时间以实现严格的可重现构建

1
2
3
4
# config/services.yaml
parameters:
    # ...
    kernel.container_build_time: '1234567890'

kernel.container_class

类型: string 默认值: (见下文解释)

此参数存储容器类的唯一标识符。实际上,这仅在 使用具有多个内核的应用程序 时确保每个内核都有唯一的标识符才重要。

默认值由 Symfony 基于当前的 配置环境调试模式 生成。例如,如果你的应用程序内核在 App 命名空间中定义,在 dev 环境中运行,并且启用了 debug 模式,则此参数的值为 App_KernelDevDebugContainer

此值也通过内核类的 getContainerClass() 方法公开,你可以重写该方法以返回不同的值

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

类型: boolean 默认值: (该值在引导内核时作为参数传递)

此参数存储应用程序使用的当前 调试模式 的值。

kernel.environment

类型: string 默认值: (该值在引导内核时作为参数传递)

此参数存储应用程序使用的当前 配置环境 的名称。

此值定义用于运行应用程序的配置选项,而 kernel.runtime_environment 选项定义应用程序部署的位置。例如,这允许在不同的场景(如 stagingproduction (kernel.runtime_environment))中使用 prod 配置 (kernel.environment) 运行应用程序。

kernel.logs_dir

类型: string 默认值: $this->getProjectDir()/var/log

此参数存储 Symfony 应用程序的日志目录的绝对路径。它根据当前的 配置环境 自动计算。

此值也通过内核类的 getLogDir() 方法公开,你可以重写该方法以返回不同的值。

kernel.project_dir

类型: string 默认值: 项目的 composer.json 目录

此参数存储 Symfony 应用程序的根目录的绝对路径,应用程序使用该路径来执行相对于项目根目录的文件路径操作。

默认情况下,其值自动计算为存储主 composer.json 文件的目录。此值也通过内核类的 getProjectDir() 方法公开。

如果你不使用 Composer,或者已移动 composer.json 文件位置或已完全删除它(例如在生产服务器中),请重写 getProjectDir() 方法以返回不同的值

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

类型: string 默认值: %env(default:kernel.environment:APP_RUNTIME_ENV)%

此参数存储应用程序使用的当前 运行时环境 的名称。

此值定义应用程序部署的位置,而 kernel.environment 选项定义用于运行应用程序的配置选项。例如,这允许在不同的场景(如 stagingproduction (kernel.runtime_environment))中使用 prod 配置 (kernel.environment) 运行应用程序。

kernel.runtime_mode

类型: string 默认值: %env(query_string:default:container.runtime_mode:APP_RUNTIME_MODE)%

此参数存储应用程序使用的当前运行时模式的查询字符串。例如,当应用程序在 Web 模式下运行时,查询字符串看起来像 web=1&worker=0,而在长时运行的 Web 服务器中运行时,查询字符串看起来像 web=1&worker=1。此参数可以使用 APP_RUNTIME_MODE 环境变量进行设置。

kernel.runtime_mode.web

类型: boolean 默认值: %env(bool:default::key:web:default:kernel.runtime_mode:)%

应用程序是否在 Web 环境中运行。

kernel.runtime_mode.cli

类型: boolean 默认值: %env(not:default:kernel.runtime_mode.web:)%

应用程序是否在 CLI 环境中运行。默认情况下,此值与 kernel.runtime_mode.web 参数相反。

kernel.runtime_mode.worker

类型: boolean 默认值: %env(bool:default::key:worker:default:kernel.runtime_mode:)%

应用程序是否在 worker/长时运行的环境中运行。并非所有 Web 服务器都支持它,你必须使用长时运行的 Web 服务器,例如 FrankenPHP

kernel.secret

类型: string 默认值: %env(APP_SECRET)%

此参数存储 framework.secret 参数 的值。

本作品,包括代码示例,根据 Creative Commons BY-SA 3.0 许可获得许可。
目录
    版本