【问题标题】:Lumen "PUT" request doesn't update流明“PUT”请求不更新
【发布时间】:2018-11-06 18:10:59
【问题描述】:

我有下面的代码 sn-p 来更新 MySQL 表。我正在使用 POSTMAN PUT 请求测试我的后端。此代码似乎没有正确更新 MySQL,而是将 MySQL 单元格设置为空值,即使我在 POSTMAN 结果中得到“更新成功”。

以下是 Lumen PHP 代码

public function updateSensorPackage(Request $request, $id){
   $sensorPackage = AddSensorPackage:: find($id);
   $sensorPackage -> elderly_id = $request ->  input('elderly_id');
   $sensorPackage -> centre_id = $request -> input('centre_id'); 
   $sensorPackage -> package_id = $request -> input('package_id'); 
   $sensorPackage -> beacon_id = $request ->  input('beacon_id');
   $sensorPackage -> created_by = $request -> input('created_by'); 
   $sensorPackage -> save();
   return response('Updated Successfully', 200);

}

我将 POSTMAN 标头设置为“Content-type : Application/json”并在请求正文中发送参数。下面我粘贴了邮递员“PUT”请求。

运行dd($request->all()); 后,我得到了以下结果

我的 PHP 版本是 7+,Lumen 版本是 5.5.2

【问题讨论】:

  • 改用$sensorPackage->update();
  • @Hussein,不工​​作:)
  • 保留此更改并访问像这样的属性$request->elderly_id
  • AddSensorPackage$fillable 属性是否包含一个包含您要更新的所有字段的数组?
  • @IvankaTodorova $fillable 与批量分配有关,这不是他的情况

标签: php laravel postman lumen


【解决方案1】:

将参数写入

x-www-form-urlencode 

看看魔法,它工作正常。原因是 laravel 只是创建 PUT 请求的感觉,它不能在表单数据或原始数据中给出

【讨论】:

  • 在 x-www-form-urlencoded 的情况下,整个表单数据作为长查询字符串发送。查询字符串包含由 & 字符分隔的名称-值对,例如field1=value1&field2=value2 等
  • 你是对的,但是数据是经过编码的,所以不用担心。
  • 或者,您自己将值作为参数添加到查询字符串中。
【解决方案2】:

你应该尝试发送一个 POST 请求而不是 PUT,然后在请求中添加一个像这样的新参数。

_method = "PUT"

我不记得我在哪里找到的,但它与底层的 symfony 请求类有关。

编辑:找到了。

你也可以设置 Postman 使用 'x-www-url-formurlencoded' 发送请求参数

https://laravel.io/forum/02-13-2014-i-can-not-get-inputs-from-a-putpatch-request

【讨论】:

  • 这其实是一个比较完整的回应
【解决方案3】:

取消链接get方法你需要定义的header

Accept: 'application/json'
'Content-Type': 'application/json'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多