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

Дата оновлення перекладу 2024-05-29

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

Додатки 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 за замовчуванням: the result of executing 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 .