avris / http
v4.0.0
2018-01-12 19:36 UTC
Requires
- php: ^7.1
- avris/bag: ^4.0
Requires (Dev)
- avris/function-mock: ^1.0
- phpunit/phpunit: ^6.5
- squizlabs/php_codesniffer: ^3.2
- symfony/var-dumper: ^4.0
This package is not auto-updated.
Last update: 2024-09-12 22:42:25 UTC
README
HTTP 请求/响应抽象
安装
composer require avris/http
用法
请求
PHP 在丑陋的全局变量中放置的内容 $_SERVER
、$_GET
、$_POST
、$_COOKIE
和 $_FILES
,通过 Request
类封装在良好的对象中。只需这样做
$request = Request::fromGlobals();
就可以优雅地访问所有数据并将其传递出去。
getMethod(): string
isPost(): bool
getScheme(): string
getHost(): string
getAbsoluteBase(): string
getBase(): string
getFrontController(): string
getUrl(): string
getCleanUrl(): string
getFullUrl(): string
getIp(bool $safe = true): string
isAjax(): bool
getQuery(): Bag
--$_GET
getData(): Bag
--$_POST
getCookies(): Bag
getServer(): Bag
getFiles(): FileBag
getHeaders(): HeaderBag
getBody(): string
getJsonBody()
为了测试等目的,您还可以创建一个带有一些任意数据的请求对象,例如
$request = Request::create('DELETE', '/posts/123', [], ['redirect' => '1']);
头部抽象层提供了额外的功能,例如获取最佳的 Accept-*
值。
请求中的文件将被封装在 UploadedFile
中
if ($request->isPost()) {
$file = $request->getFiles()->get('attachment');
$filename = $file->moveToRandom(__DIR__ . '/pics');
$post->setAttachment($filename);
}
响应
类似地,Response
类封装了 HTTP 响应。例如,您的控制器可以返回
return new Response(
'<strong>OK</strong>',
201,
['Content-Type' => 'text/html; charset=utf-8'],
new CookieBag([
new Cookie('foo', 'bar', new \DateTime('+10 minutes')),
]),
);
这个对象可以被传递、修改、扩展等,而实际上不需要通过 HTTP 发送任何数据。只有执行了 $response->send()
之后,您的头部、cookie、响应代码和内容才会被发送。
该库提供了一些创建更标准响应的辅助函数
* `new JsonResponse(['foo' => bar])`
* `new RedirectResponse('/done')`
* `new FileResponse($post->getAttachmentPath(), 'image.png')`
* `new MemoryFileResponse($image->getContent())`
* `new StreamedResponse(function() { while (true) { echo 'heartbeat' . PHP_EOL; sleep(1); }})`
会话
您可以使用 Session
对象封装而不是使用 $_SESSION
超全局变量。它基本上工作相同,但允许您编写更优雅的、面向对象的、可测试的代码,并轻松交换标准会话与不同的会话。
StoragelessSession
是标准 HTTP 会话的替代方法。它不在服务器上存储任何信息,而是使用 cookie 传输信息。(因此,它仅应在安全连接中用于少量非机密数据!)
$session = new StoragelessSession;
// ...
$session->onRequest($request);
// ...
$foo = $session->get('foo');
$session->set('bar', $bar);
// ...
$session->onResponse($response);
// ...
$response->send();
版权
- 作者: Andre Prusinowski (Avris.it)
- 许可证: MIT