shrikeh / teapot
PHP HTTP 响应状态库
v2.3.1
2017-09-01 13:56 UTC
Requires
- php: >=5.5
- psr/http-message: ^1.0
- teapot/status-code: ^1.0
Requires (Dev)
- behat/behat: ^3.2
- bossa/phpspec2-expect: ^2.0
- escapestudios/symfony2-coding-standard: ^2.9
- phpspec/phpspec: ~3.0.0
- squizlabs/php_codesniffer: ^2.7
This package is auto-updated.
Last update: 2024-09-08 13:46:47 UTC
README
这是一个非常简单的库,旨在通过明确定义 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。这允许您非常细致地控制应用程序中允许哪些状态代码。
所有常量都有文档块,使用官方的 W3C 和 IETF 草案规范中对状态代码的描述,以帮助 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
编码标准
联系我
如果您有任何建议,请随时通过电子邮件发送到 barney+teapot@shrikeh.net 或在 Twitter 上联系我 @shrikeh。