HTTP 组件

v1.4.0 2016-08-18 15:47 UTC

This package is not auto-updated.

Last update: 2024-09-23 12:41:29 UTC


README

Build Status Coverage Status Scrutinizer Code Quality Latest Stable Version Total Downloads License

安装

您可以使用 composer 安装此组件。该软件包是

patricklouys/http

基本用法

请求

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

use Http\HttpRequest;

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

现在您可以在 $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->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();

它们可以像这样使用

foreach ($response->getHeaders() as $header) {
    header($header, false);
}

echo $response->getContent();

header 的第二个参数必须是 false。否则,将覆盖现有头部。

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 的 addCookie 和 deleteCookie 方法。

示例

<?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 = new HttpRequest($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER, file_get_contents('php://input'));
$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);

foreach ($response->getHeaders() as $header) {
    header($header);
}

echo $response->getContent();