在 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.environment
类型: string
默认值: (该值在引导内核时作为参数传递)
此参数存储应用程序使用的当前 配置环境 的名称。
此值定义用于运行应用程序的配置选项,而 kernel.runtime_environment 选项定义应用程序部署的位置。例如,这允许在不同的场景(如 staging
或 production
(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 选项定义用于运行应用程序的配置选项。例如,这允许在不同的场景(如 staging
或 production
(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。