在 Kernel 中配置
Symfony 應用程式定義了一個 kernel 類別(預設位於 src/Kernel.php
),其中包含幾個可配置的選項。本文說明如何配置這些選項,並展示 Symfony 基於該配置建立的容器參數列表。
kernel.build_dir
type: string
default: $this->getCacheDir()
此參數儲存 Symfony 應用程式的建置目錄的絕對路徑。此目錄可用於將唯讀快取(即已編譯的容器)與讀寫快取(即 快取池)分開。當應用程式部署在唯讀檔案系統(如 Docker 容器或 AWS Lambda)中時,請指定非預設值。
此值也透過 kernel 類別的 getBuildDir() 方法公開,您可以覆寫該方法以傳回不同的值。
您也可以透過定義名為 APP_BUILD_DIR
的環境變數來變更建置目錄,其值為建置資料夾的絕對路徑。
kernel.bundles
type: array
default: []
此參數儲存應用程式中註冊的 套件 列表以及其主要套件類別的 FQCN
1 2 3 4 5
[
'FrameworkBundle' => 'Symfony\Bundle\FrameworkBundle\FrameworkBundle',
'TwigBundle' => 'Symfony\Bundle\TwigBundle\TwigBundle',
// ...
]
此值也透過 kernel 類別的 getBundles() 方法公開。
kernel.bundles_metadata
type: array
default: []
此參數儲存應用程式中註冊的 套件 列表以及有關它們的一些中繼資料
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 類別的任何方法公開,因此您只能透過容器參數取得它。
kernel.cache_dir
type: string
default: $this->getProjectDir()/var/cache/$this->environment
此參數儲存 Symfony 應用程式的快取目錄的絕對路徑。預設值由 Symfony 根據目前的 配置環境 產生。您的應用程式可以在執行階段將資料寫入此路徑。
此值也透過 kernel 類別的 getCacheDir() 方法公開,您可以覆寫該方法以傳回不同的值。
kernel.charset
type: string
default: UTF-8
此參數儲存應用程式中使用的字元集或 字元編碼 類型。此值也透過 kernel 類別的 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
type: string
default: 執行 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
type: string
default: (請參閱以下說明)
此參數儲存容器類別的唯一識別碼。實際上,這僅在 使用具有多個 kernel 的應用程式 時,確保每個 kernel 都有唯一的識別碼才重要。
預設值由 Symfony 根據目前的 配置環境 和 偵錯模式 產生。例如,如果您的應用程式 kernel 在 App
命名空間中定義,在 dev
環境中執行,並且 debug
模式已啟用,則此參數的值為 App_KernelDevDebugContainer
。
此值也透過 kernel 類別的 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
type: string
default: (該值在啟動 kernel 時作為引數傳遞)
此參數儲存應用程式使用的目前 配置環境 的名稱。
此值定義用於執行應用程式的配置選項,而 kernel.runtime_environment 選項定義應用程式部署的位置。例如,這允許在不同的情境(如 staging
或 production
(kernel.runtime_environment
))中,使用 prod
配置 (kernel.environment
) 執行應用程式。
kernel.logs_dir
type: string
default: $this->getProjectDir()/var/log
此參數儲存 Symfony 應用程式的記錄目錄的絕對路徑。它是根據目前的 配置環境 自動計算的。
此值也透過 kernel 類別的 getLogDir() 方法公開,您可以覆寫該方法以傳回不同的值。
kernel.project_dir
type: string
default: 專案 composer.json
的目錄
此參數儲存 Symfony 應用程式根目錄的絕對路徑,應用程式使用它來執行相對於專案根目錄的檔案路徑操作。
依預設,其值會自動計算為主要 composer.json
檔案儲存的目錄。此值也透過 kernel 類別的 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
type: string
default: %env(default:kernel.environment:APP_RUNTIME_ENV)%
此參數儲存應用程式使用的目前 執行階段環境 的名稱。
此值定義應用程式部署的位置,而 kernel.environment 選項定義用於執行應用程式的配置選項。例如,這允許在不同的情境(如 staging
或 production
(kernel.runtime_environment
))中,使用 prod
配置 (kernel.environment
) 執行應用程式。
kernel.runtime_mode
type: string
default: %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
type: boolean
default: %env(bool:default::key:web:default:kernel.runtime_mode:)%
應用程式是否在 Web 環境中執行。
kernel.runtime_mode.cli
type: boolean
default: %env(not:default:kernel.runtime_mode.web:)%
應用程式是否在 CLI 環境中執行。依預設,此值與 kernel.runtime_mode.web
參數相反。
kernel.runtime_mode.worker
type: boolean
default: %env(bool:default::key:worker:default:kernel.runtime_mode:)%
應用程式是否在 worker/長時間執行的環境中執行。並非所有 Web 伺服器都支援它,您必須使用長時間執行的 Web 伺服器,例如 FrankenPHP。