我正在为Laravel创建API。我使用PUT方法来更新数据。
我用Postman使用PUT方法发送数据。在我的控制器中,我得到了一个空数组。如何访问传递的数据?
在我的路线中,我有:
Route::put('vehicletypes/{id}','API\VehicletypeController@update');
在我的控制器中:
public function update(Request $request, $id){
print_r($request->all()); exit;
}
如何获取PUT方法传入的数据?
8条答案
按热度按时间wz3gfoph1#
你得到的是空响应,因为PHP对
PUT
有一些安全限制。但是Laravel对此有一个解决方案。因此,要解决这个问题,您必须从Postman发送
POST
请求,其中POST
参数为_method
,值为PUT
。这应该行得通。13z8s7eq2#
Laravel作弊是因为html表单只支持GET和POST,但它确实理解真实的的PUT/PATCH请求。
这个问题看起来像是在Symfony中,如果它是multipart/form-data,它就不能解析数据,因为一个替代的尝试使用x-www-form-urlencoded内容处理。
b4wnujal3#
也要改变路线,
vd2z7a6w4#
在Postman的body标签下选中“x-www-form-urlencoded”而不是“form-data”,put方法也可以工作...
mqkwyuun5#
为什么没有人给出明确的解释最初的放法场
因为您的路由器uri是使用命令显示的
的更新方法是put/patch,因此首先添加
表单中的字段和字段应该相同
添加后,csrf_toke表单将正常工作。并且最终形状将如下面的形式。
a5g8bdjr6#
以下链接将解决获取请求表数据和图像的问题。
如果你使用的是Laravel,你可以很容易地解析和绑定\Illuminate\Http\Request示例中的表单参数
只需从下面的链接获取ParseInputStream类:
Class ParseInputStream.php
在Laravel中创建另一个验证规则类可选但不是必需的,
我希望它解决了你想要实现的,使用PUT或PATCH方法沿着表单参数
q1qsirdb7#
如前所述,这不是laravel(或symfony,或任何其他框架)的问题,这是PHP的限制。
所以,我找到了this PECL extension。我对pecl不是很熟悉,而且似乎不能用pear来让它工作。但我用的是CentOS和Remi PHP,它有一个yum包。
我相信还有其他各种风格的Linux软件包,我相信任何对pear/pecl/general php扩展有更多了解的人都可以毫无问题地在windows或mac上运行它。
我运行了
yum install php-pecl-apfd
,它立即修复了这个问题(我不得不重新启动我的docker容器,但这是一个给定的)。也就是说,
request->all()
和files->get()
使用multipart/form-data
重新开始处理PATCH和PUT请求。因此,我设法让我的API与我的前端很好地配合,而没有添加任何怪癖(这需要传达给任何开发前端解决方案的人)或打破RESTful约定。
ivqmmu1c8#
由于Laravel无法解析PUT数据,因此您可以直接使用流来检索数据:
来源:https://www.php.net/manual/en/wrappers.php.php#wrappers.php.input