Конфигурирование в Kernel

Дата обновления перевода 2023-01-16

Конфигурирование в Kernel

Некоторую конфигурацию можно сделать прямо в классе ядра (по умолчанию размещённое в src/Kernel.php). Вы можете сделать это переопределив конкретные меоды в родительском классе Kernel.

Конфигурация

В предыдущих версиях Symfony существовала другая опция конфигурации для определения "имени ядра", что важно только при использовании приложений с несколькими ядрами. Если вам нужен уникальный ID для ваших ядер, используйте параметр kernel.container_class или метод Kernel::getContainerClass().

Набор символов

тип: string по умолчанию: UTF-8

Возвращает набор символов, который используется в приложении. Это значение отображается через параметр конфигурации kernel.charset и метод getCharset().

Чтобы изменить это значение, переопределите метод 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()
    {
        return 'ISO-8859-1';
    }
}

Каталог проекта

тип: string по умолчанию: каталог проекта composer.json

Возвращает абсолютный путь к корневому каталогу вашего проекта Symfony, который используется приложениями для выполнения операций с путями файлов, относящихся к корневому каталогу проекта.

По умолчанию, его значение вычисляет автоматически, как каталог, где хранится главный файл composer.json. Это значение отображается через параметр конфигурации kernel.project_dir и метод 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__);
    }
}

Каталог кеша

тип: string по умолчанию: $this->getProjectDir()/var/cache/$this->environment

Возвращает абсолютный путь к каталогу кеша вашего проекта Symfony. Вычсиляется автоматически, основываясь на текущем окружении . Данные могут быть записаны в этот путь во время работы.

Это значение появляется через параметр конфигурации kernel.cache_dir и метод getCacheDir(). Чтобы изменить эту настройку, переопределите метод getCacheDir(), чтобы он возвращал правильный каталог кеша.

Каталог компоновки

тип: string по умолчанию: $this->getCacheDir()

Возвращает абсолютный путь к каталогу компоновки вашего проекта Symfony. Этот каталог может быть использован для разделения кеша только для чтения (т.е. скомпилированного контейнера) и кеша для чтения и записи (т.е. пулов кеша). Укажите значение не по умолчанию, когда приложение запускается в файловой системе только для чтения, вроде контейнера Docker или AWS Lambda.

Это значение появляется через параметр конфигурации kernel.build_dir и метод getBuildDir(). Чтобы изменить эту настройку, переопределите метод getBuildDir(), чтобы он возвращал правильный каталог компоновки.

Каталог логов

тип: string по умолчанию: $this->getProjectDir()/var/log

Возвращает абсолютный путь к каталогу логов вашего проекта Symfony. Вычисляется автоматически, основываясь на текущем окружении .

Это значение появляется через параметр конфигурации kernel.logs_dir и метод getLogDir(). Чтобы изменить эту настройку, переопределите метод getLogDir(), чтобы он возвращал правильный каталог логов.

Время построения контейнера

тип: string по умолчанию: результат выполнения time()

Symfony следует философии детерминированной компиляции, что гарантирует, что результат компиляции такого же исходного кода не приведет к другим результатам. Это помогает проверить, чтобы заданный бинарный или выполняемый код был скомпилирован из какого-то доверенного исходного кода.

На практике, скомпилированный сервис-контейнер вашего приложения всегда будет одинаков, если вы не измените его исходный код. Он появляется через такие параметры конфигурации:

  • container.build_hash, хеш содержания всех ваших исходных файлов;
  • container.build_time, временная отметка момента, когда контейнер был создан (результат выполнения функции PHP time);
  • container.build_id, результат слияния двух предыдущих параметров и шифрования результатов с использованием CRC32.

Так как значение container.build_time будет изменяться каждый раз, когда вы будете компилировать приложение, компиляция не будет строго детерминированной. Если вам это важно, решением будет использовать другой параметр конфигурации под названием kernel.container_build_time, и установить его в неизменное время создания, чтобы достичь строго детерминированной компиляции:

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