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.