方法
每个 HTTP 请求通常都有一个方法,常见的方法包括:
- GET
- POST
- PUT
- DELETE
- HEAD
- PATCH
- OPTIONS
你可以使用 Request 对象的 getMethod() 方法来检查 HTTP 请求的方法:
$method = $request->getMethod();
有时候需要伪造或覆盖 HTTP 请求的方法。例如,当你需要在仅支持 GET 或 POST 请求的传统 Web 浏览器中模拟 PUT 请求时,这就非常有用。
Info
要启用请求方法覆盖功能,必须将 Method Overriding Middleware 注入到你的应用程序中。
有两种方式可以覆盖 HTTP 请求的方法。一种方式是在 POST 请求的正文中包含一个名为 METHOD 的参数。HTTP 请求必须使用 application/x-www-form-urlencoded 内容类型。
POST /path HTTP/1.1
Host: example.com
Content-type: application/x-www-form-urlencoded
Content-length: 22
data=value&_METHOD=PUT
另一种方式是通过自定义的 X-Http-Method-Override HTTP 请求头来覆盖 HTTP 请求的方法。这种方式适用于任何 HTTP 请求的内容类型。
POST /path HTTP/1.1
Host: example.com
Content-type: application/json
Content-length: 16
X-Http-Method-Override: PUT
{"data":"value"}
请求 URI
每个 HTTP 请求都有一个标识所请求应用资源的 URI。HTTP 请求 URI 包含以下几个部分:
- 协议(例如
http或https) - 主机(例如
example.com) - 端口(例如
80或443) - 路径(例如
/users/1) - 查询字符串(例如
sort=created&dir=asc)
你可以使用 PSR-7 Request 对象的 getUri() 方法获取其 URI 对象:
$uri = $request->getUri();
PSR-7 Request 对象的 URI 本身是一个对象,提供了以下方法来检查 HTTP 请求的 URL 部分:
- getScheme()
- getAuthority()
- getUserInfo()
- getHost()
- getPort()
- getPath()
- getQuery() (返回完整的查询字符串,例如
a=1&b=2) - getFragment()
你可以使用 Request 对象的 getQueryParams() 方法将查询参数作为关联数组获取。