我正努力在我的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');
答案 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