【问题标题】:PUT/PATCH request with postman returns status code 0 in Laravel使用邮递员的 PUT/PATCH 请求在 Laravel 中返​​回状态码 0
【发布时间】:2015-08-26 19:58:11
【问题描述】:

我已经编写了一些 REST API 方法,包括用于更新数据库条目的方法:

// Update
public function update(CreateAEDRequest $request, $id) {
    $aed = AED::find($id);

    if(!$aed) {
        return response()->json(['message' => "Dieser AED exisitiert nicht", 'code' => 404], 404);
    }

    $owner = $request->get('owner');
    $street = $request->get('street');

    $aed->owner = $owner;
    $street->street = $street;

    $aed->save();

    return response()->json(['message' => 'Der AED wurde aktualisiert'], 200);
}

路线定义为:

    Route::put('/aeds/{aeds}', 'APIAEDController@update');
    Route::patch('/aeds/{aeds}', 'APIAEDController@update');

一个请求正在被处理:

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;
use Illuminate\Http\JsonResponse;

class CreateAEDRequest extends Request
{
    public function authorize()
    {
        // turn back to false when doing auth
        return true;
    }

    public function rules()
    {
        return [
            'owner'  => 'required',
            'street' => 'required'
        ];
    }

}

但是当我使用邮递员并尝试更新现有的数据库条目并根据要求填写要在邮递员中发送的所有者和街道变量时,我收到消息:“无法获得任何响应。返回状态代码 0”

所有其他方法都可以正常工作。难道我的路由定义不正确?

更新 当我以x-www-form-urlencoded发送数据时,它可以工作!当我将它们作为表单数据发送时,它会显示错误消息。

【问题讨论】:

  • 当您编码为表单数据时,$id 是否为空?通常你会用与路由参数相同的名称来调用你的变量,但我不确定这是否是基本需求。
  • 对于 put/patch,您需要以 x-www-form-urlencoded 形式发送数据

标签: php laravel postman


【解决方案1】:

在过去的几天里,我也在为此苦苦挣扎。 有同事发现可以使用 Request 的 input() 函数来收集参数。

使用您的 Postman 示例,您可以执行以下操作:

Postman Example - Stackoverflow

然后在 Laravel 中你可以像这样访问数据:

// Not sure if you might need to swap the $id with the $request parameters.
// Try and swap them if you are not getting the correct data
public function update($id, CreateAEDRequest $request) {
    $aed = AED::find($id);

    if(!$aed) {
        return response()->json([
            'message' => "Dieser AED exisitiert nicht", 'code' => 404
          ], 404);
    }

    // USE the input() function here to read the data sent from Postman request
    $owner = $request->input('owner');
    $street = $request->input('street');

    $aed->owner = $owner;
    $street->street = $street;

    $aed->save();

    return response()->json(['message' => 'Der AED wurde aktualisiert'], 200);
}

PS:我使用的是 Laravel 8.65 和 Postman v9.0.8

【讨论】:

    【解决方案2】:

    Postman

    1. 将方法更改为POST
    2. 添加新变量_method,其值为PUTPATCH

    【讨论】:

      【解决方案3】:

      在 Postman 中,您应该指出您发送的数据是 x-www-url-formurlencoded

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-16
        • 1970-01-01
        • 2019-04-02
        • 1970-01-01
        • 2016-03-28
        • 2022-08-02
        • 2023-04-06
        相关资源
        最近更新 更多