在 Lumen 中获取 PUT 数据

Getting PUT data in Lumen

我正在努力在我的 Lumen API 中创建有效的 PUT 路由。我的请求到达了正确的路线,但我无法通过 $request->all().

访问任何值

我发现 PHP 需要读取 php://input 流来获取 PUT body。这是在 Symfony\Component\HttpFoundation\RequestgetContent() 函数中完成的。然而,这个函数被调用了多次,并且由于读取时输入缓冲区被清空,所以当我需要时数据不存在。

我还发现,当我把我的Content-Type header设置为text/plain时,我可以成功打印$request->json(),但是当我将它设置为application/json ] object 为空。

有什么想法吗?

PS:我知道对于 HTML 请求,您应该添加 _method 参数,但由于我没有通过 HTML 执行我的请求,因此参数不应该需要。

编辑:

我的路线:

$app->put('settings', 'SettingController@update');

我的控制器:

class SettingController extends Controller
{
    public function update(Request $request)
    {
        print_r($request->all());
    }
}

您的请求的内容类型需要相应地设置。 在我的例子中,我正在发送 json 数据,所以我将它设置为 application/json.

所以当我在我的请求正文中发送这个时:

{"asd": "asdf"}

我从你的控制器收到了这个响应代码:

Array
(
    [asd] => asdf
)

我在使用 Lumen 时遇到了完全相同的问题。在 public/index.php 我不得不更换:

Illuminate\Http\Request::capture();

$app->run($request)

有了这个:

$app->run();

注: 如果你想在 $app->运行() 之后使用请求对象(例如做一些日志记录或基准测试)你应该使用 $app->request.

logging_function($app->request);

您需要在页眉中使用正确的内容类型。尝试

application/x-www-form-urlencoded