geggleto/http

HTTP 组件

2.0.0 2016-02-03 18:35 UTC

This package is auto-updated.

Last update: 2024-08-29 04:25:23 UTC


README

Build Status

安装

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

geggleto/http ^2.0

基本用法

请求

The Request class provides an object oriented wrapper around the PHP superglobals. This makes it possible to inject it as a dependency into any of your classes that require it.

use Http\Request;

$request = new Request($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER);

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

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

请注意,GET 和 POST 参数都会合并,并通过 getParameter 访问。

响应

The Response object is the data holder for the HTTP response. It has no constructor dependencies and can be instantiated with just

use Http\Response;

$response =  new Response;

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

$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。否则将覆盖现有头部。

cookies

为了避免在您的类中调用 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\Request;
use Http\Response;
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 Request($_GET, $_POST, $_COOKIE, $_FILES, $_SERVER);
$response = new Response;

$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();