laravel 如何接收 http delete 请求的参数?Input::get()不行

php 用file_get_contents("php://input") 接收 http delete 或put 方法发送的参数。

请教大家 laravel 如何接收?试了下,Input::get()不行
已邀请:

安正超

赞同来自: admin entere

三个点:
1. 请求方式
DELETE 

2. 使用:
Route::delete(); 

3. 请求格式请确定为:
Content-Type: application/x-www-form-urlencoded 

我的测试例子:

路由:
Route::delete('/abc', function(){
var_dump(Input::all());
});

请求:
EAEDA9CD-C3F2-45C0-90C1-02E3E9150CCF.png


请求体:
DELETE /abc HTTP/1.1
Host: laravel.app
HELLO: WORLD
x-test: 555
Cache-Control: no-cache
Postman-Token: d99761c4-a3ef-81d1-54e6-19581a04fe95
Content-Type: application/x-www-form-urlencoded

user_id=1&abcc=hello

能正常使用

JohnLui

赞同来自:

Laravel 中处理 delete 方法是通过 post 加字段做的。

FiveSay - 成武

赞同来自:

laravel 中并不是真正使用了 http delete 或 put 请求,而是将所有非 get 请求通过 post + 隐藏表单 的方式提交:
<input name="_method" type="hidden" value="PUT">

entere

赞同来自:

感谢大家的回答,可能我的问题描述的不是特别清楚,大家误解了,我详细描述一下

http delete请求,注意这个http 请求不是由laravel表单发起的,是一个http的delete请求,有可能是任何一个客户端发起的。

用laravel 框架接收这个http delete请求,我们知道,如果是一个get 或post 用Input::get() 就可以获取到,http delete 请求的参数 在laravel框架中 如何获取呢?

一一逍遥

赞同来自:

我觉得这个问题你应该去探讨 php 如何获取delete请求的吧。如果PHP可以通过像$_POST同样的$_DELETE方式来获取的话那就自然你可以在Action里通过这种方式来获取(但是据我所知好像没有)。
所以你就得想其他的方式了,分析一下PHP的$_SERVER这个全局变量然后结合file_get_contents('php://input');这个方法。
http://php.net/manual/zh/reser ... r.php
楼上说用 Input::getContent() 这个方法,好像我没找到这个方法。

Here is some code which may be helpful for others wanting to handle PUT and DELETE params. You are able to set $_PUT and $_DELETE via $GLOBALS[], but they will not be directly accessible in functions unless declared global or accessed via $GLOBALS[]. To get around this, I've made a simple class for reading GET/POST/PUT/DELETE request arguments. This also populates $_REQUEST with PUT/DELETE params.

This class will parse the PUT/DELETE params and support GET/POST as well.
class Params {
private $params = Array();

public function __construct() {
$this->_parseParams();
}

/**
* @brief Lookup request params
* @param string $name Name of the argument to lookup
* @param mixed $default Default value to return if argument is missing
* @returns The value from the GET/POST/PUT/DELETE value, or $default if not set
*/
public function get($name, $default = null) {
if (isset($this->params[$name])) {
  return $this->params[$name];
} else {
  return $default;
}
}

private function _parseParams() {
$method = $_SERVER['REQUEST_METHOD'];
if ($method == "PUT" || $method == "DELETE") {
    parse_str(file_get_contents('php://input'), $this->params);
    $GLOBALS["_{$method}"] = $this->params;
    // Add these request vars into _REQUEST, mimicing default behavior, PUT/DELETE will override existing COOKIE/GET vars
    $_REQUEST = $this->params + $_REQUEST;
} else if ($method == "GET") {
    $this->params = $_GET;
} else if ($method == "POST") {
    $this->params = $_POST;
}
}
}

要回复问题请先登录注册