Для использования внешних библиотек, использующих контракты на основе рекомендаций PSR, вам может понадобиться преобразовать собственные сущности фреймворка в соответствующие объекты PSR.
В силу принципа самодостаточности фреймворка и первоначальному отказу от внешних зависимостей, системные классы фреймворка схожи со стандартными, но у них собственный интерфейс. Для следования стандартам это решается применением адаптера Converter, реализованного в виде Сервиса.
Сервис Converter — предоставляет методы получения объектов согласно интерфейсам PSR, сформированных из системных объектов фреймворка HLEB2.
Способы использования Converter в контроллерах (и всех классах, унаследованных от Hleb\Base\Container) на примере получения объекта для логирования по PSR-3:
Пример получения объекта logger из сервиса Converter в коде приложения:
Также сервис Converter может быть получен через внедрение зависимостей по интерфейсу Hleb\Reference\Interface\Converter.
Метод toPsr3Logger() возвращает объект для логирования с интерфейсом PSR-3 (Psr\Log\LoggerInterface).
Метод toPsr11Container() возвращает объект контейнера с интерфейсом PSR-11 (Psr\Container\ContainerInterface).
Метод toPsr16SimpleCache() возвращает объект для кеширования с интерфейсом PSR-16 (Psr\SimpleCache\CacheInterface).
Для манипуляций с PSR-7 объектами существует достаточно большое количество сторонних библиотек, чтобы включать еще одну реализацию во фреймворк. Например, их можно создать при использовании популярной библиотеки Nyholm\Psr7:
Состав параметров в конструкторе зависит от выбранной библиотеки.
Чтобы не инициировать таким образом каждый раз, реализацию можно вынести в отдельный класс или сервис.