Документация/Контейнер/Сервисы/Converter

Преобразование в PSR

Для использования внешних библиотек, использующих контракты на основе рекомендаций PSR, вам может понадобиться преобразовать собственные сущности фреймворка в соответствующие объекты PSR.

В силу принципа самодостаточности фреймворка и первоначальному отказу от внешних зависимостей, системные классы фреймворка схожи со стандартными, но у них собственный интерфейс. Для следования стандартам это решается применением адаптера Converter, реализованного в виде Сервиса.

Сервис Converter — предоставляет методы получения объектов согласно интерфейсам PSR, сформированных из системных объектов фреймворка HLEB2.

Способы использования Converter в контроллерах (и всех классах, унаследованных от Hleb\Base\Container) на примере получения объекта для логирования по PSR-3:

// variant 1
use Hleb\Reference\ConverterInterface;
$logger $this->container->get(ConverterInterface::class)->toPsr3Logger();

// variant 2
$logger $this->container->converter()->toPsr3Logger();

Пример получения объекта logger из сервиса Converter в коде приложения:

// variant 1
use Hleb\Static\Container;
use 
Hleb\Reference\ConverterInterface;
$logger Container::get(ConverterInterface::class)->toPsr3Logger();

// variant 2
use Hleb\Static\Converter;
$logger Converter::toPsr3Logger();

Также сервис Converter может быть получен через внедрение зависимостей по интерфейсу Hleb\Reference\Interface\Converter.


#toPsr3Logger

Метод toPsr3Logger() возвращает объект для логирования с интерфейсом PSR-3 (Psr\Log\LoggerInterface).


#toPsr11Container

Метод toPsr11Container() возвращает объект контейнера с интерфейсом PSR-11 (Psr\Container\ContainerInterface).


#toPsr16SimpleCache

Метод toPsr16SimpleCache() возвращает объект для кеширования с интерфейсом PSR-16 (Psr\SimpleCache\CacheInterface).


#PSR-7 объекты

Для манипуляций с PSR-7 объектами существует достаточно большое количество сторонних библиотек, чтобы включать еще одну реализацию во фреймворк. Например, их можно создать при использовании популярной библиотеки Nyholm\Psr7:

use Hleb\Reference\RequestInterface;
use 
Hleb\Reference\ResponseInterface;
use 
Hleb\Static\Container;

// Request
$rq Container::get(RequestInterface::class);
$psr7Response = new \Nyholm\Psr7\Request(
    
$rq->getMethod(),
    (string)
$rq->getUri(),
    
$rq->getHeaders(),
    
$rq->getRawBody(),
    
$rq->getProtocolVersion(),
);

// Response
$rs Container::get(ResponseInterface::class);
$psr7Response = new \Nyholm\Psr7\Response(
    
$rs->getStatus(),
    
$rs->getHeaders(),
    
$rs->getBody(),
    
$rs->getVersion(),
    
$rs->getReason(),
);

Состав параметров в конструкторе зависит от выбранной библиотеки.
Чтобы не инициировать таким образом каждый раз, реализацию можно вынести в отдельный класс или сервис.

Защита от CSRF События

Страница создана: @fomiash
К началу страницы