MODULEWork 框架的 HTTP 包

v0.3 2013-08-29 12:32 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:08:29 UTC


README

Latest Stable Version Build Status

Modulework 框架的 HTTP 包。

它提供了一个方便处理 HTTP 请求和 HTTP 响应的方式。

例如,您可以使用这两个类创建一个应用程序

$req = Request::makeFromGlobals();
    
$content = 'Hello ' . $req->query->get('name', 'Stranger');
    
$res = Response::make($content);
$res->send();

这个应用程序将向每个访问者显示他们的名字;如果访问者没有在查询字符串中提供名字,它将回退到 "Stranger"。

当然,这是一个非常基础的例子,但它可以做更多的事情!

我们可以扩展这个例子,并将名字保存到一个 cookie 中

$req = Request::makeFromGlobals();
    
$name = $req->query->get('name', Stranger);
$content = 'Hello ' . $name;
    
$res = Response::make($content);
$res->addCookie(Cookie::make(
		'name',
		$name
));
$res->send();

或者检查方法是 GET 还是 POST,这样用户也可以通过 POST 发送他们的名字

$req = Request::makeFromGlobals();

$name = $req->query->get('name',
	$req->request->get('name', 'Stranger')
	);
// Or just getting the method:
$method = $req->getMethod();

$content = 'Hello ' . $name;

$res = Response::make($content);
$res->addCookie(Cookie::make(
		'name',
		$name
		));
$res->send();

或者显示客户端的 IP 地址

echo Request::makeFromGlobals()->getClientIp();

现在我们也将一个 cookie 发送给用户。但我们还能做更多

$res = Response::make()
->setContent('Foo')
->setStatusCode(200)
->addHeader('Expire', 'never')
->setDate(new DateTime)
->addCookie(Cookie::make('foo')
	->setValue('bar')
	->setSecure(false)
	->setHttpOnly(false)
)
->prepare($request)
->send();

链式方法!自定义头部!自定义状态码!还有更多!

Response 类足够智能,可以在发出重定向时设置状态码

$res = Response::make()
->addHeader('Location', 'foo.bar')
->prepare($request)
->send()

这将导致以下头部信息

HTTP/1.0 302 Found
Location: foo.bar
Date [...]

但 Request 类可以做得更多,我们可以用它进行非常基础的路由

$req = Request::makeFromGlobals();
if ('/' == $req->getPath()) {
    echo "You are on the homepage"
} elseif ('/foo/bar' == $req->getPath()) {
    echo "You are on the bar page of foo!"
}

这是非常基础的,并且不是最佳实践,但它展示了我们可以用这个类做什么!

还有一些其他的 Response 类,比如 RedirectResponse 和 JsonResponse 类。

这里是一个使用示例

$res = RedirectResponse::make('http://foo.bar')
->withCookie(Cookie::make('foo'))
->prepare(Request::makeFromGlobals)
->send();

如您所见,使用非常简单。 注意! 这只是一个 包装器,用于正常的 Response。您也可以这样做

$res = Response::make('<extra>', 302, array('Location' => 'http://foo.bar'))
->addCookie(Cookie::make('foo'))
->prepare(Request::makeFromGlobals)
->send();

唯一没有显示在替代方法中的是 HTML meta 重定向(如果头部没有触发)。

JsonResponse 类也非常直观

$res = JsonResponse::make(array('foo' => 'bar'))
->prepare(Request::makeFromGlobals)
->send();

这将导致以下响应

HTTP/1.0 200 OK
Content-Type application/json
Date [...]

{"foo": "bar"}

非常实用,不是吗?!