104corp/support

此包已被废弃,不再维护。未建议替代包。

104corp 支持包。

2.0.0 2023-08-03 16:28 UTC

This package is not auto-updated.

Last update: 2024-02-23 04:24:03 UTC


README

Build Status codecov Latest Stable Version Total Downloads License

104corp 支持包。

系统需求

  • PHP >= 5.5

安装

使用Composer进行安装

$ composer require 104corp/support

说明

这里是常用的工具实现成 Trait,可以直接使用,这样可以避免复制粘贴所引起的问题。

ContainerAwareTrait

ContainerAwareTrait 实现了 PSR-11 对象的设置。

GuzzleClientAwareTrait

GuzzleClientAwareTrait 实现了如何设置Guzzle客户端的方法。

它的实现方法是:当调用getHttpClient()时,如果$httpClient已经被setHttpClient()设置,则返回现有的$httpClient;否则,就创建一个新的。

这种做法可以在测试和实际使用之间取得更好的平衡。平常使用通常不需要太在意如何初始化Guzzle,但在测试需要使用mock的时候,这样设计将能方便地替换真实对象。

HttpClientAwareTrait

HttpClientAwareTrait 也是设置Guzzle客户端的方法。不同的是,它只依赖于接口而不是实现,这样在需要替换Guzzle时,有一个接口可以实施,而整个程序不需要大改。

LoggerTrait

LoggerTrait 继承了Psr\Log\LoggerAwareTrait,同时实现 log 方法来使用它提供的 logger 成员。另外 log 方法也做了 logger 是否为 null 判定。

使用它的 class 可以直接在任何角落使用 log 方法来操作 logger,而且不需要在意 logger 物件是否存在。而要不要记 log 会有使用这个 class 的角色决定是否要 setLogger()。因此可以在测试初始化的时候忽略,而在上线的时候传入需要的 Logger。

以下是简单的例子:

use Corp104\Support\LoggerTrait;
use Psr\Log\LogLevel;

class MyClass {
    use LoggerTrait;
    
    public function doSomething() {
        $this->log(LogLevel::INFO, 'I do something');
    }
}

// --------------------------------------


$foo = new MyClass();
$foo->doSomething();  // 這裡不會記 log

$logger = new \Monolog\Logger('name');
$foo->setLogger($logger);
$foo->doSomething();  // 這裡會記 log 

另外,setLogger()是认 interface 的,代表包括自己写的 logger 之外,还能传入第三方所写的 logger,如Monolog

贡献

开发相关资讯可以参考CONTRIBUTING,有任何问题或建议,欢迎发 issue;如果觉得代码可以修更好的话,也欢迎发 PR 修正。

PR 如何使用可以参考Git 官方文件