Конфигурирование в ядре
Дата обновления перевода 2024-07-25
Конфигурирование в ядре
Приложения 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.default_locale
Этот параметр сохраняет значение парамтера framework.default_locale .
kernel.enabled_locales
Этот параметр сохраняет значение параметра framework.enabled_locales .
kernel.environment
тип: string
по умолчанию: (значение, переданное в качестве аргумента при запуске ядра)
Этот параметр сохраняет имя текушего окружения конфигурации , используемого приложением.
Это значение определяет опции конфигурации, используемые для запуска приложения, тогда как
опция kernel.runtime_environment определяет
место, где развёрнуто приложение. Это позволяет, например, запускать приложение с конфигурацией prod
(kernel.environment
) в различных сценариях, таких как staging
или production
(kernel.runtime_environment
).
kernel.error_controller
Этот параметр сохраняет значение параметра framework.error_controller .
kernel.http_method_override
Этот параметр сохраняет значение параметра framework.http_method_override .
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
// src/Kernel.php
namespace App;
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
// ...
class Kernel extends BaseKernel
{
// ...
public function getProjectDir(): string
{
return \dirname(__DIR__);
}
}
kernel.runtime_environment
тип: string
по умолчанию: %env(default:kernel.environment:APP_RUNTIME_ENV)%
Этот параметр сохраняет имя текущего окружения прогона, используемого приложением.
Это значение определяет место, где развёрнуто приложение, тогда как параметр
kernel.environment определяет
опции конфигурации, используемые для запуска приложения. Это позволяет, например,
запускать приложение с конфигурацией prod
(kernel.environment
) в различных
сценариях, таких как staging
или production
(kernel.runtime_environment
).
kernel.runtime_mode
тип: string
по умолчанию: %env(query_string:default:container.runtime_mode:APP_RUNTIME_MODE)%
Этот параметр хранит строку запроса текущего режима выполнения, используемого
приложением. Например, строка запроса выглядит как web=1&worker=0
, когда
приложение работает в веб-режиме, и web=1&worker=1
при работе в
долго работающем веб-сервере. Этот параметр можно задать с помощью переменной окружения
APP_RUNTIME_MODE
.
kernel.runtime_mode.web
тип: boolean
по умолчанию: %env(bool:default::key:web:default:kernel.runtime_mode:)%
Работает ли приложение в веб-среде.
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:)%
Работает ли приложение в рабочей/долговременной среде. Не все веб-серверы поддерживают это, и вам придется использовать долгосрочный веб-сервер, например FrankenPHP.
kernel.secret
тип: string
по умолчанию: %env(APP_SECRET)%
Этот параметр сохраняет значение параметра framework.secret .
kernel.trust_x_sendfile_type_header
Этот параметр сохраняет значение параметра framework.trust_x_sendfile_type_header .
kernel.trusted_hosts
Этот параметр сохраняет значение параметра framework.trusted_hosts .
kernel.trusted_proxies
Этот параметр сохраняет значение параметра framework.trusted_proxies .