在流明中获取PUT数据

时间:2016-05-18 12:37:50

标签: laravel lumen dingo-api

我正努力在我的Lumen API中创建工作PUT路线。我的请求到达了正确的路线,但我无法通过$request->all()访问任何值。

我已经发现PHP需要读取php://input流来获取PUT主体。这是在getContent()的{​​{1}}函数中完成的。但是,此函数被多次调用,并且由于输入缓冲区在读取时被清空,因此在需要时数据不存在。

我还发现当我将Content-Type标头设置为text / plain时,我可以成功打印Symfony\Component\HttpFoundation\Request,但是当我将它设置为application / json时,该对象为空。

有什么想法吗?

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

修改

我的路线:

$request->json()

我的控制器:

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

3 个答案:

答案 0 :(得分:1)

需要相应地设置您的请求的内容类型。 在我的情况下,我发送了json数据,所以我把它设置为application / json。

所以当我在我的请求体内发送此信息时:

{"asd": "asdf"}

我使用您控制器的代码得到了这个回复:

Array
(
    [asd] => asdf
)

答案 1 :(得分:0)

我和Lumen有同样的问题。在public / index.php中,我不得不替换:

Illuminate\Http\Request::capture();

$app->run($request)

用这个:

$app->run();

注意: 如果你想在$ app-> run()之后使用Request对象(例如进行一些日志记录或基准测试),你应该使用$ app-> request。

logging_function($app->request);

答案 2 :(得分:0)

您的标题中必须具有正确的内容类型。尝试

application/x-www-form-urlencoded