Конфігурування в ядрі

Дата оновлення перекладу 2022-12-16

Конфігурування в ядрі

Деяку конфігурацію можна зробити прямо у класі ядра (за замовчуванням розташоване у 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'