xzy*_*fer 12
您可能需要直接从php://input
流中读取数据.
我知道这是你必须如何处理PUT
请求和一些快速谷歌搜索表明该方法也适用DELETE
.
请参阅此处和此处的示例.这里的评论说这个方法DELETE
也适用.
这是一个有趣的代码示例,它将有所帮助(从symfony 1.4.9框架的sfWebRequest.class.php改为略微简化):
public function initialize(...)
{
... code ...
$request_vars = array();
if (isset($_SERVER['REQUEST_METHOD']))
{
switch ($_SERVER['REQUEST_METHOD'])
{
case 'PUT':
if ('application/x-www-form-urlencoded' === $this->getContentType())
{
parse_str($this->getContent(), $request_vars );
}
break;
case 'DELETE':
if ('application/x-www-form-urlencoded' === $this->getContentType())
{
parse_str($this->getContent(), $request_vars );
}
break;
}
... more code ...
}
public function getContent()
{
if (null === $this->content)
{
if (0 === strlen(trim($this->content = file_get_contents('php://input'))))
{
$this->content = false;
}
}
return $this->content;
}
Run Code Online (Sandbox Code Playgroud)
此代码示例将PUT
或DELETE
请求参数放入$request_vars
数组中.一个限制似乎是表单(如果你使用另一个内容类型标题)必须是'application/x-www-form-urlencoded',一些快速的谷歌搜索证实了这一点.
file_get_contents('php://input')
应该总是给你完整的请求体.请注意,它只能读取一次.更大的问题是DELETE请求是否可能包含一个正文,这似乎是一个未解决的问题,但可能会有效.
我会说在身体中发送id有点无REST.有问题的实体应该被URL引用example.com/foo/42
,因此DELETE请求应该说DELETE /foo/42
,而不是DELETE /foo
请求体中的id.