nia/requestresponse-http

HTTP环境中的请求响应模式的实现。

这个软件包的官方仓库似乎已消失,因此该软件包已被冻结。

1.2.0 2018-04-25 12:47 UTC

This package is not auto-updated.

Last update: 2022-03-10 12:36:23 UTC


README

HTTP环境中的请求响应模式的实现。

安装

使用Composer要求此软件包。

	composer require nia/requestresponse-http

测试

要运行单元测试,请使用以下命令

$ cd /path/to/nia/component/
$ phpunit --bootstrap=vendor/autoload.php tests/

如何使用

以下示例展示了如何使用HTTP请求响应组件进行常见的index.php用例。对于路由和展示,可以使用nia/routingnia/presenter组件。

	<?php
	// file: www/index.php
	use Nia\RequestResponse\Http\HttpRequest;
	use Nia\RequestResponse\Http\HttpResponseInterface;
	require_once __DIR__ . '/../vendor/autoload.php';

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

	// [...]
	//
	// routing:
	// [...]
	// controller/presenter:
	// $response = $request->createResponse();
	// $response->set<XYZ>(...);
	//
	// [...]

	$response = $request->createResponse();
	/* @var $response HttpResponseInterface */

	$header = $response->getHeader();

	// add content type if not set.
	if (! $header->has('Content-Type')) {
	    $header->set('Content-Type', 'text/html; charset=utf-8');
	}
	// add content length if not set.
	if (! $header->has('Content-Length')) {
	    $header->set('Content-Length', (string) strlen($response->getContent()));
	}

	// send headers to client.
	foreach ($header as $header => $value) {
	    header($header . ': ' . $value);
	}

	// send cookies to client.
	foreach ($response->getCookies() as $cookie) {
	    $name = $cookie->getName();
	    $value = $cookie->getValue();
	    $expire = $cookie->getExpire()->getTimestamp() - (new DateTime())->getTimestamp();
	    $path = $cookie->getPath();

	    setcookie($name, $value, $expire, $path);
	}

	// send the response.
	http_response_code($response->getStatusCode());
	echo $response->getContent();

	// close stream.
	fclose($stream);