У меня следующая задача:
В проекте планирую использовать логгер (перед созданием объекта логгера, требуется его конфигурировать) у этого логгера могут быть разные зависимост и т.д.
Решил использовать DI-контейнер, ранее с ними не работал. (например простой DI контейнер Pimple
)
Правильно понимаю, что если я создаю сам контейнер в каком-то своем файле, далее при использовании этого контейнера в других файлах, мне придется заново описывать все связи и сервисы в этом контейнере? Или есть какие-то режимы работы (типа синглтона)?
DI - это внедрение зависимостей. Ваша зависимость - это логгер. Как ее внедрить - есть несколько способов, я обычно использую внедрение через конструктор.
Представьте, что у вас нет никакого DI контейнера. Например, у вас есть какой-нибудь класс, который использует какой-нибудь логгер LoggerInterface.
Вы его спокойно описываете
class Handler
{
private $logger;
public function __container(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function save($data)
{
// saving...
$this->logger->logMessage('message');
// other handling...
}
}
В этом коде нет никакого упоминания о DI контейнере.
Теперь вам необходимо отдельно описать логику внедрения. Она может отличаться от конкретных DI контейнеров. Но суть в том, что она идет отдельно от вашего приложения, например можно сделать файлик di-config.php, описать в нем конфиг DI и подключать его где надо.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я хочу открыть компонент в модуле, для размещения его под контентной частью на нескольких страницах сайтаМожно ли как-то организовать код...
При импорте данных(штрих-коды товаров) в таблицу MySQL в конце одной строки появляется символ \u200b Как его убрать? Сначала получаю данные из массива,...
При установке с помощью композера любых пакетов, выпадает ошибка