Конфигурирование в ядре

Дата обновления перевода 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 .