tflori/http

HTTP 组件

v1.9.0 2018-07-02 06:05 UTC

README

Build Status Coverage Status Latest Stable Version Total Downloads License

安装

您可以使用 composer 安装此组件

composer require tflori/http

基本用法

请求

请求类提供了一种面向对象的包装,围绕 PHP 超全局变量。这使得您可以将它作为依赖项注入到任何需要它的类中。

use Http\HttpRequest;

$request = new HttpRequest($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER, file_get_contents('php://input'));
// equals to:
$request = HttpRequest::createFromGlobals();

现在您可以在 $request 对象上使用以下方法

$request->getParameter($key, $defaultValue = null);
$request->getFile($key, $defaultValue = null);
$request->getCookie($key, $defaultValue = null);
$request->getParameters();
$request->getQueryParameters();
$request->getBodyParameters();
$request->getRawBody();
$request->getCookies();
$request->getFiles();
$request->getMethod();
$request->getScheme();
$request->getHttpAccept();
$request->getReferer();
$request->getUserAgent();
$request->getIpAddress();
$request->isSecure();
$request->getQueryString();

请注意,GET 和 POST 参数都合并在一起,可以通过 getParameter 访问。

响应

HttpResponse 对象是 HTTP 响应的数据持有者。它没有构造函数依赖,只需使用以下方式即可实例化:

use Http\HttpResponse;

$response =  new HttpResponse;

可以使用以下方法修改响应:

$response->setStatusCode($statusCode, $statusText = null);
$response->addHeader($name, $value);
$response->setHeader($name, $value);
$response->addCookie(Cookie $cookie);
$response->deleteCookie(Cookie $cookie);
$response->setContent($content);
$response->redirect($url);

如果您在 setStatusCode 中不提供状态文本,则如果可用,将选择适合 HTTP 状态代码的适当默认状态文本。

addHeader 将添加一个新头部值而不覆盖现有值,setHeader 将覆盖现有值。

redirect 方法将设置 301 重定向的状态码和文本。

deleteCookie 将将 cookie 内容设置为空并将过期时间设置为过去。

以下两种方法可用于获取响应中的当前数据

$response->getHeaders();
$response->getContent();

要发送响应,请使用以下方法

$response->send();

确保不要两次发送响应,否则您将收到错误消息。

Cookie

为了避免在您的类中调用 new 并为您的应用程序设置默认的 cookie 设置,您可以使用 CookieBuilder 类来创建您的 cookie 对象。它具有以下可用的方法:

$cookieBuilder->setDefaultDomain($domain); // defaults to NULL
$cookieBuilder->setDefaultPath($path); // defaults to '/'
$cookieBuilder->setDefaultSecure($secure); // defaults to TRUE
$cookieBuilder->setDefaultHttpOnly($httpOnly); // defaults to TRUE
$cookieBuilder->build($name, $value); // returns the cookie object

您可以使用以下方法来操作现有的 cookie

$cookie->setValue($value);
$cookie->setMaxAge($seconds);
$cookie->setDomain($domain);
$cookie->setPath($path);
$cookie->setSecure($secure);
$cookie->setHttpOnly($httpOnly);

cookie 对象可以使用 HttpResponse 方法 addCookiedeleteCookie

示例

<?php

use Http\HttpRequest;
use Http\HttpResponse;
use Http\CookieBuilder;

$loader = require_once __DIR__ . '/vendor/autoload.php';

$cookieBuilder = new CookieBuilder();

// Disable the secure flag because this is only an example
$cookieBuilder->setDefaultSecure(false);

$request = HttpRequest::createFromGlobals();
$response = new HttpResponse();

$content = '<h1>Hello World</h1>';
$content .= $request->getCookie('TestCookie', 'Cookie is not set.');

if ($request->getParameter('setCookie') === 'true') {
    $cookie = $cookieBuilder->build('TestCookie', 'Cookie is set.');
    $response->addCookie($cookie);
}

$response->setContent($content);

$response->send();