shrikeh/teapot

PHP HTTP 响应状态库

v2.3.1 2017-09-01 13:56 UTC

README

latest_stable_version_img license_img twitter_img

这是一个非常简单的库,旨在通过明确定义 HTTP 1.1 响应代码作为常量来帮助任何基于 Web 的应用程序提高可读性。它包括两个主要组件:一个包含常量的接口,以及一个针对 HTTP 的特定异常。

使用方法

使用 StatusCodes 接口

假设我们正在对 cURL 客户端响应进行 PHPUnit 测试

<?php

/**
 * @dataProvider someUrlProvider
 */
public function testResponseIsOK($url)
{
    $client = new Client($url);
    $response = $client->get();

    $this->assertSame(200, $response->getStatusCode());
}

这将变为

<?php

use Teapot\StatusCode;
...
$this->assertSame(StatusCode::OK, $response->getStatusCode());

虽然这是一个简单的例子,但与其他 HTTP 状态代码相比,代码的可读性有了提高

<?php

use Teapot\StatusCode;

$code = $response->getStatusCode();

$this->assertNotEquals(StatusCode::NOT_FOUND, $code);
$this->assertNotEquals(StatusCode::FORBIDDEN, $code);
$this->assertNotEquals(StatusCode::MOVED_PERMANENTLY, $code);
$this->assertSame(StatusCode::CREATED, $code);

由于 StatusCode 是一个没有方法的接口,您可以直接实现它,如果您愿意的话

<?php

use Teapot\StatusCode;

class FooController implements StatusCode
{
    public function badAction()
    {
        if ($this->request->getMethod() == 'POST') {
            throw new \Exception('Bad!', self::METHOD_NOT_ALLOWED);
        }
    }
}

这可能在抽象类中很有用,这样子类就不需要显式地使用接口。

库中包含各种“辅助”接口,例如 WebDAV 和 Http。此外,各种状态代码被拆分为定义它们的 RFC:例如,Http 辅助接口扩展了 RFC 2616、2324 和 2774。这允许您非常细致地控制应用程序中允许哪些状态代码。

所有常量都有文档块,使用官方的 W3CIETF 草案规范中对状态代码的描述,以帮助 IDE 并供参考。

使用 HttpException

HttpException 非常简单。它只是一个用于提高可读性的命名异常

<?php

use Teapot\HttpException;
use Teapot\StatusCode;

throw new HttpException(
    'Sorry this page does not exist!',
    StatusCode::NOT_FOUND
);

异常本身使用 StatusCode 接口,如果您愿意,可以避免手动和显式导入它

<?php

use Teapot\HttpException;

throw new HttpException(
    'Sorry this page does not exist!',
    HttpException::NOT_FOUND
);

安装

运行以下命令。

composer require shrikeh/teapot

编码标准

整个库旨在符合 PSR-1PSR-2PSR-4

联系我

如果您有任何建议,请随时通过电子邮件发送到 barney+teapot@shrikeh.net 或在 Twitter 上联系我 @shrikeh