文档/容器/服务/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();

在应用程序代码中从 Converter 服务中获取 logger 对象的示例:

// 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 Protection Events

页面翻译:chatgpt 4-o
返回顶部