Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

Основная конфигурация хранится, в скрипте по генерации контейнера.

bin/build.php

<?php

declare(strict_types=1);

require_once __DIR__ . '/../vendor/autoload.php';

$fqcn = 'App\Container';
$filename = __DIR__ . '/../src/Container.php';

file_put_contents(
    $filename,
    (new \Cekta\DI\ContainerBuilder(
        fqcn: $fqcn,
        entries: [\App\Example::class],
        // you configuration here, like entries, params, alias, etc.
    ))->build()
);

Здесь вы можете задать следующие параметры

FQCN

Полное имя класса (namespace + class_name). Из FQCN эти параметры будут извлечены.

FILENAME

Полный путь до файла где он будет сохранен Container.

Крайне желательно чтобы файл располагался вместе где он будет доступен с помощью автозагрузки классов composer, с учетом его fqcn и физического расположения.

entries

Массив строк, где каждая строка это основная точки входа которая должна быть разрешима с помощью Container.

На этапе build, Container использует эти зависимости и пытается их разрешить с помощью конфигурации (других параметров) или autowiring в конструктор.

Вы можете сгенерировать список этих точек входа, на основе содержимого вашего проекта, например все классы реализующие Psr\Http\Server\RequestHandlerInterface или имеющие php attribute.

params

Основные параметры которые можно внедрять в зависимости.

params: [
    'Имя зависимости в локальном или глобальном именование' => 'Значение',
    \PDO::class . '$dsn' => 'sqlite:./db.sqlite', // локальное имя, только для PDO аргумент с именем dsn будет иметь значение ...
    'username' => 'root', // глобальное имя, всем кому потребуется username, будет использовано это значение.
]

Параметры можно задавать глобально и локально.
Рекомендую задавать параметры для конкретной зависимости(локально).

Например можно задавать dsn, username, password и тд.

Подробней

alias

С помощью данного параметра можно заменить одну зависимость на другую.

alias: [
    I::class => R2::class, // Глобальное имя
    // Есть возможность задавать и локальные имена!
]

Вместо I::class будет использоваться R2::class, например так можно регистрировать реализацию интерфейса для всего проекта.

Alias можно задавать глобально и локально.
Чаще всего их задают глобально для всего проекта.

Подробней

singletons

Позволяет управлять жизненным циклом зависимостей.

В singletons указываются зависимости, которые должны иметь жизненный цикл singleton, а именно создаваться в единичном экземпляре за все время жизни скрипта.

factories

Позволяет управлять жизненным циклом зависимости.

В factories указываются зависимости, которые должны иметь жизненный цикл factories, а именно создается каждый раз новый экземпляр.