文档/容器/服务/Converter
转换为PSR
为了使用基于 PSR 推荐的契约的外部库,你可能需要将自己的框架实体转换为相应的 PSR 对象。
由于框架的自给自足原则和最初拒绝外部依赖,框架的系统类与标准类相似,但具有自己的接口。为了遵循标准,这通过使用作为服务实现的 Converter 适配器解决。
Converter 服务提供根据 PSR 接口获取对象的方法,这些接口由 HLEB2 框架的系统对象形成。
在控制器中使用 Converter 的方法(以及从 Hleb\Base\Container 继承的所有类),通过使用 PSR-3 获取日志记录对象为例:
use Hleb\Reference\ConverterInterface;
$logger = $this->container->get(ConverterInterface::class)->toPsr3Logger();
$logger = $this->container->converter()->toPsr3Logger();
在应用程序代码中从 Converter 服务中获取 logger 对象的示例:
use Hleb\Static\Container;
use Hleb\Reference\ConverterInterface;
$logger = Container::get(ConverterInterface::class)->toPsr3Logger();
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;
$rq = Container::get(RequestInterface::class);
$psr7Response = new \Nyholm\Psr7\Request(
$rq->getMethod(),
(string)$rq->getUri(),
$rq->getHeaders(),
$rq->getRawBody(),
$rq->getProtocolVersion(),
);
$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