fol/http

此软件包已被弃用且不再维护。作者建议使用 zendframework/zend-diactoros 软件包。

Http 库

v6.0.2 2015-03-23 20:22 UTC

This package is auto-updated.

Last update: 2022-02-01 12:41:54 UTC


README

PHP 5.5 的 Http 库。尽管它位于 FOL 项目中,但可以独立使用。

Build Status Scrutinizer Code Quality

示例

基本使用

use Fol\Http\Request;
use Fol\Http\Response;
use Fol\Http\MiddlewareStack;
use Fol\Http\Middlewares;

//Inicia unha instancia de MiddlewareStack
$stack = new MiddlewareStack();

//Engade alguns middlewares
$stack->push(new Middlewares\Languages());
$stack->push(new Middlewares\Ips());

$stack->push(function ($request, $response, $stack) {
	$response->getBody()->write('Hello world');
	$stack->next();
});

$stack->push(function ($request, $response, $stack) {
	$response->getBody()->setStatus(200);
	$stack->next();
});

//Executaos
$response = $stack->run(new Request('http://domain.com'));

//Envía a resposta ao navegador
$response->send();

使用会话和路由

会话和路由就像可以添加到 MiddlewareStack 的其他 "中间件" 一样。

use Fol\Http\Request;
use Fol\Http\Response;
use Fol\Http\MiddlewareStack;

use Fol\Http\Sessions\Native;
use Fol\Http\Routes\Router;

//Inicia o router
$router = new Router();

$router->map([
	'index' => [
		'path' => '/',
		'target' => function ($request, $response) {
			$response->getBody()->write('Esta é a portada');
		}
	],
	'about' => [
		'path' => '/about',
		'target' => function ($request, $response) {
			$session = $request->attributes->get('SESSION');

			$response->getBody()->write('Ola, ti eres '.$session->get('username'));
		}
	]
]);

//Inicia o MiddlewareStack
$stack = new MiddlewareStack();

//Engade a middleware da sesión
$stack->push(new Native());

//E tamén a do router
$stack->push($router);

//Executa
$response = $stack->run(new Request('http://domain.com'));

//Envía a resposta
$response->send();

Request

处理 HTTP 请求的数据

use Fol\Http\Request;

//Crear dende as variables globais ($_SERVER, $_FILES, etc)
$request = Request::createFromGlobals();

//Ou podes crear a túa petición personalizada
$request = new Request('http://blog.com/?page=2', 'GET', ['Accept' => 'text/html']);

//Obxecto para acceder aos datos da url (host, path, query, fragment, etc)
$request->url;

//Accede á "query" (alias de $request->url->query):
$request->query;

//Xestiona cabeceiras
$request->headers

//Xestiona cookies
$request->cookies

//Xestiona os datos parseados do body
$request->data

//Xestiona os arquivos subidos
$request->files

//Devolve o body (streamable)
$body = $response->getBody();

Response

use Fol\Http\Response;

//Crea unha resposta
$response = new Response('Hello world', 200, ['Content-Type' => 'text/html']);

//Xestiona as cabeceiras
$request->headers

//Xestiona as cookies
$request->cookies

//Devolve o body (streamable)
$body = $response->getBody();

MiddlewareStack

处理整个 HTTP 请求/响应周期的所有中间件。为了更好地理解中间件的概念,我推荐阅读这篇文章

中间件

此库自带一系列默认中间件,具有最常用的功能。

  • BaseUrl: 有助于定义默认的基础 URL,该 URL 会被用于 cookie 和路由。要访问 URL: $request->attributes->get('BASE_URL')
  • BasicAuthentication: 用于创建 HTTP 基本认证
  • DigestAuthentication: 用于创建 "digest" 类型的 HTTP 认证
  • Formats: 用于自动检测和规范化请求格式(json、txt、html、png 等)。要访问格式: $request->attributes->get('FORMAT')
  • Ips: 检测客户端的 IP 地址。要访问它: $request->attributes->get('IP')
  • Languages: 检测客户端的首选语言。要访问它: $request->attributes->get('LANGUAGE')

会话

提供了一个简单的接口用于处理会话。要访问会话: $request->attributes->get('SESSION')。有两种类型的会话:

  • Native(使用 PHP 的原生实现)
  • Session(用于处理测试会话)

路由器

提供了一个简单的 MVC 路由系统。要访问路由: $request->attributes->get('ROUTE')