modulework / http
MODULEWork 框架的 HTTP 包
v0.3
2013-08-29 12:32 UTC
Requires
- php: >=5.3
This package is not auto-updated.
Last update: 2024-09-23 14:08:29 UTC
README
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"}
非常实用,不是吗?!